Como PIVOT, mas valores não discretos
-
29-09-2020 - |
Pergunta
Uma tabela lista vários eventos onde cada evento tem quatro atributos (colunas), chame-os de A, B, C, P
Seria simples pivotar para obter uma tabela com colunas para A, B, C, P=1, P=2, P=3, etc.
No entanto, preciso que as colunas sejam A, B, C, P<1, P<2, P<3, etc.
Em outras palavras, se uma linha da maneira "simples" fosse X, Y, Z, 7, 3, 5, 2, então o que eu realmente preciso é X, Y, Z, 7, 10, 15, 17 porque qualquer P menosque N também é menor que N+1.
Eu sei que posso calcular os valores (X, Y, Z, 7, 10, 15, 17), carregá-los em uma tabela temporária e dinamizar isso, mas talvez haja algo simples que meus talentos SQL não reconheçam imediatamente?
Se for importante, o resultado terminará no SSRS.
Solução
Se eu entendi corretamente, então isso deve funcionar.
SELECT
A,
B,
C,
SUM(CASE WHEN P < 1 THEN 1 ELSE 0 END) AS P1,
SUM(CASE WHEN P < 2 THEN 1 ELSE 0 END) AS P2,
SUM(CASE WHEN P < 3 THEN 1 ELSE 0 END) AS P3,
SUM(CASE WHEN P < 4 THEN 1 ELSE 0 END) AS P4
FROM
Events
GROUP BY
A,
B,
C
Isso não é dinâmico.Por exemplo, se você tiver uma linha com P=4, ela não adicionará uma linha para P<5.Também está usando estritamente < e não <=.