none
Transformar linha em coluna RRS feed

  • 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_EPT                                                

     

    Esta 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 DESC                                   

     

     

    Mas 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??

     

     

     

    quinta-feira, 20 de março de 2008 16:01

Respostas

  • No SQL Server 2005 você pode usar PIVOT,

    No 2000 terá quer fazer algo mais ou menos assim:

     

    Code Snippet

    SELECT 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

     

     

    quinta-feira, 20 de março de 2008 17:10

Todas as Respostas

  • CPC,

     

    Você esta utilizando qual SQL Server?

    quinta-feira, 20 de março de 2008 17:02
  • Então, estou utilizando o QMF (da IBM)...

     

    quinta-feira, 20 de março de 2008 17:08
  • No SQL Server 2005 você pode usar PIVOT,

    No 2000 terá quer fazer algo mais ou menos assim:

     

    Code Snippet

    SELECT 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

     

     

    quinta-feira, 20 de março de 2008 17:10
  • Fabiano,

     

    Muito obrigado pela informação ... fucionou perfeitamente ... só faltou o distinct depois do select.

     

    Valeu!!

     

    quinta-feira, 20 de março de 2008 17:59