Usuário com melhor resposta
Transformar linha em coluna

Pergunta
-
Pessoal, boa tarde!
Estou rodando a seguinte query:
SELECT DT_REF, '13520003' AS RUBRICA, CD_PRD_EPT, 'EM_DIA' AS SITUACAO,
COUNT(*) AS QTDE
FROM APLIC.TB214_OPE_EPT
WHERE (CD_PRD_EPT = 3 AND CD_SIT_OPE IN (5))
GROUP BY DT_REF, CD_PRD_EPT
UNION
SELECT DT_REF, '13520003' AS RUBRICA, CD_PRD_EPT, 'EM_ATRASO' AS SITUACAO,
COUNT(*) AS QTDE
FROM APLIC.TB214_OPE_EPT
WHERE (CD_PRD_EPT = 3 AND CD_SIT_OPE IN (8))
GROUP BY DT_REF, CD_PRD_EPTEsta consulta apresenta a a quantidade de operações para o produto escolhido (CD_PRD_EPT), por situação da operação (CD_SIT_OPE).
O resultado é este:
CD
DT PRD
REF RUBRICA EPT SITUACAO QTDE
---------- -------- ------ --------- -----------
2008-03-19 13520003 3 EM_ATRASO 7206
2008-03-19 13520003 3 EM_DIA 50963
Entretanto, gostaria que os registros não se repetissem, ou seja, que o resultado fosse algo deste tipo:
DT_REF RUBRICA CD_PRD EM_DIA EM_ATRASO
2008-03-19 13520003 3 50963 7206
Tentei fazer o seguinte:
SELECT DISTINCT DT_REF, '13520058' AS RUBRICA, CD_PRD_EPT,
CASE CD_SIT_OPE WHEN 5 THEN COUNT(*) END AS EM_DIA,
CASE CD_SIT_OPE WHEN 8 THEN COUNT(*) END AS EM_ATRASO
FROM APLIC.TB214_OPE_EPT
WHERE CD_PRD_EPT = 3
GROUP BY DT_REF, CD_PRD_EPT, CD_SIT_OPE
ORDER BY 4 DESC, 5 DESCMas o resultado:
CD
DT PRD EM EM
REF RUBRICA EPT DIA ATRASO
---------- -------- ------ ----------- -----------
2008-03-19 13520058 3 - -
2008-03-19 13520058 3 - 7206
2008-03-19 13520058 3 50963 -
Ainda não é o esperado, ou seja, tinha que aparecer tudo em uma só linha.
Alguém pode me ajudar??
Respostas
-
No SQL Server 2005 você pode usar PIVOT,
No 2000 terá quer fazer algo mais ou menos assim:
Code SnippetSELECT
a.DT_REF, '13520058' AS RUBRICA,a
.CD_PRD_EPT,b
.EM_DIA,c
.EM_ATRASO FROM APLIC.TB214_OPE_EPT a INNER JOIN (SELECT CD_PRD_EPT, COUNT(*) AS EM_DIA FROM APLIC.TB214_OPE_EPT WHERE CD_SIT_OPE = 5 GROUP BY CD_PRD_EPT) AS b ON a.CD_PRD_EPT = b.CD_PRD_EPT INNER JOIN (SELECT CD_PRD_EPT, COUNT(*) AS EM_ATRASO FROM APLIC.TB214_OPE_EPT WHERE CD_SIT_OPE = 8 GROUP BY CD_PRD_EPT) AS c ON a.CD_PRD_EPT = c.CD_PRD_EPT WHERE a.CD_PRD_EPT = 3 ORDER BY 4 DESC,5
DESC
Todas as Respostas
-
-
-
No SQL Server 2005 você pode usar PIVOT,
No 2000 terá quer fazer algo mais ou menos assim:
Code SnippetSELECT
a.DT_REF, '13520058' AS RUBRICA,a
.CD_PRD_EPT,b
.EM_DIA,c
.EM_ATRASO FROM APLIC.TB214_OPE_EPT a INNER JOIN (SELECT CD_PRD_EPT, COUNT(*) AS EM_DIA FROM APLIC.TB214_OPE_EPT WHERE CD_SIT_OPE = 5 GROUP BY CD_PRD_EPT) AS b ON a.CD_PRD_EPT = b.CD_PRD_EPT INNER JOIN (SELECT CD_PRD_EPT, COUNT(*) AS EM_ATRASO FROM APLIC.TB214_OPE_EPT WHERE CD_SIT_OPE = 8 GROUP BY CD_PRD_EPT) AS c ON a.CD_PRD_EPT = c.CD_PRD_EPT WHERE a.CD_PRD_EPT = 3 ORDER BY 4 DESC,5
DESC -