У меня есть эта таблица:Как преобразовать строки в столбцы с помощью PIVOT в SqlServer
Dimension Meaning
--------- -------
Browser IE9
Browser IE10
Module Ticket
Module Board
OS Windows
OS Ios
OS Linux
И я хочу что-то вроде всех возможных комбинаций:
Browser Module OS
------- ------ ------
IE9 Ticket Windows
IE9 Ticket Ios
IE9 Ticket Linux
IE10 Board Windows
IE10 Board Ios
IE10 Board Linux
и так далее ... В исходной таблице не так много, поэтому никакой фантазии производительности не требуется, и я не против жесткого кода столбцов
Я в настоящее время использую этот запрос, но я получаю только одну строку:
SELECT [Browser],[Module],[Os] FROM
(
SELECT Meaning, Dimension
FROM [Mits].[dbo].[ToolHintValues]
) x
pivot
(
MAX(Meaning)
FOR Dimension IN ([Browser],[Module],[Os])
) p
Любая помощь в том, как я могу получить все комбинации? Заранее спасибо
Update: Это динамическая версия SQL еще возвращая одну строку:
DECLARE @cols AS NVARCHAR(MAX)
DECLARE @query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(Dimension)
from [dbo].[ToolHintValues]
group by Dimension
order by Dimension
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = N'SELECT ' + @cols + N' FROM
(
SELECT Meaning, Dimension
FROM [dbo].[ToolHintValues]
) x
pivot
(
MAX(Meaning)
FOR Dimension IN (' + @cols + N')
) p '
SELECT @query
exec sp_executesql @query;
Если я правильно понимаю, есть 12 комбинаций. Почему вы только перечислили шесть? –
Да, 12 комбинаций, я просто не хотел писать их все, поэтому я написал «все возможные комбинации» – Metalex