Eu tenho os seguintes dados,
Year DRC DISP Id
0 140.21 0.00 5808
1 112.37 1.00 5808
0 140.21 0.00 5824
1 112.37 0.00 5824
Eu quero girá-lo assim,
Id DRC Year 0 DISP Year 0 DRC Year 1 DISP Year 1
5808 140.21 0.00 112.37 1.00
5824 140.21 0.00 112.37 0.00
Eu tentei isso,
SELECT *
FROM
(
SELECT Year, DRC, DISP, ID From OriginalDataTable
) AS SourceTable
PIVOT
(
max(DRC)
for Year IN ([0], [1])
) AS PivotTable;
Ele gira no DRC, mas não no DISP também. O resultado é assim (0 e 1 é o valor DRC). Eu entendo por que isso acontece, mas como faço para girar o DISP também?
DISP Id 0 1
0.0 5808 140.21 112.37
0.0 5824 140.21 112.37
Em vez do
PIVOT
você pode simplesmente usar oCASE WHEN ...
. UsandoGROUP BY
então useMAX(CASE
retornará o resultado esperado:Execução de amostra com os dados de amostra fornecidos:
Resultado:
Mais explicações:
A consulta acima retorna o resultado abaixo:
Para evitar os
NULL
valores e oId
resultado sábio, useiGROUP BY Id
entãoMAX()
de cada coluna, para que no resultado final possamos obter osNULL
valores não como resultado.