PIVOT no servidor SQL 2012-novo em SQL [duplicado]
esta pergunta já tem uma resposta aqui:
1 2 3
-----------------
55 58 146,8000
55 62 59,9800
55 67 800,0500
55 82 136,7600
e quero que seja
1 58 62 67 82
---------------------------------------
55 146,8000 59,9800 800,0500 136,7600
Muito obrigado pelo vosso apoio.
0
1 answers
Fiz este exercício com uma tabela de pivô que poderia ajudar-te, considerando os títulos das colunas iguais ao conteúdo do campo [2] e não fornecendo valores repetidos na coluna [2]:
DECLARE @cols AS NVARCHAR(MAX)
SET @cols = STUFF((SELECT ',[' + convert(nvarchar,(t.[2])) + ']' AS ID
FROM TB_1 t
FOR XML PATH(''), TYPE).value('.', 'varchar(max)'),1,1, '')
DECLARE @query AS NVARCHAR(MAX);
SET @query = N'SELECT p.[1],' + @cols + N' from
(
SELECT [1],[2],[3] FROM TB_1
) x
pivot
(
max([3])
for [2] in (' + @cols + N')
) p
'
exec sp_executesql @query;
Abaixo do resultado obtido adicionando um StatementId (56) adicional e novas posições diferentes (90,91) associadas ao StatementId (56)
1 58 62 67 82 90 91
55 146,8000 59,9800 800,0500 136,7600 NULL NULL
56 NULL NULL NULL NULL 185,74 185,74
Uma solução não dinâmica pode ser:
select *
from
(
SELECT [1],[2],[3] FROM TB_1
) x
pivot
(
max([3])
for [2] in ([58] , [62] , [67] , [82] )
) p
0
Author: ɐlǝx, 2016-07-14 11:18:30