Pular para o conteúdo
  • Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 6 anos, 10 meses atrás por Avatar photoJosé Laurindo Chiappa.
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #109115
    Avatar de Raphael de OliveiraRaphael de Oliveira
    Participante

      Olá!

      Preciso agrupar resultados diferentes da mesma variável em uma linha apenas.

      O seguinte select:

      [color=#008800] SELECT DISTINCT CD_ATENDIMENTO,
      Count(CD_ATENDIMENTO) CONT,
      QTD_A AS SETOR_A,
      QTD_B AS SETOR_B
      FROM (SELECT DISTINCT CD_ATENDIMENTO,
      CASE WHEN CD_TIPO_PENDENCIA = 42 THEN To_CHAR(HR_PENDENCIA,’DD/MM/YYYY HH24:MI:SS’) ELSE ” END AS QTD_A,
      CASE WHEN CD_TIPO_PENDENCIA = 43 THEN To_CHAR(HR_PENDENCIA,’DD/MM/YYYY HH24:MI:SS’) ELSE ” END AS QTD_B
      FROM pendencia_atendimento

      WHERE CD_TIPO_PENDENCIA IN(42,43)
      )

      GROUP BY CD_ATENDIMENTO,QTD_A,QTD_B

      ORDER BY CD_ATENDIMENTO[/color]

      Traz o seguinte resultado em anexo: Anexo_1

      Mas gostaria que o resultado ficasse Assim: Anexo_2

      Quem puder me ajudar, fico muito grato.

      Obrigado!

      Attachments:
      #109116
      Avatar photoJosé Laurindo Chiappa
      Moderador

        Blz ? Então, primeira coisa vc tem que entender dois conceitos :

        1. o DISTINCT atua a nível de REGISTRO, ie, se vc tiver vários REGISTRO com os MESMOS EXATOS CAMPOS com os MESMOS VALORES TODOS, aí sim o DISTINCT remove a duplicidade…
          Assim, se vc tiver um resultset tipo :

          coluna1 coluna2 coluna 3
          1 ABC 123
          1 ABC 456

          EVIDENTEMENTE o DISTINCT aí Não Serve de Coisíssima ALGUMA, sim ??? Pois há um valor diferente que seja, pronto, o registro NÂO VAI SER CONSIDERADO uma duplicidade…. Só se o teu resultset fosse :

          coluna1 coluna2 coluna 3
          1 ABC 123
          1 ABC 123

          aí SIM o DISTINCT ia ser efetivo, retornando só um registro…. Isso tá muito bem explicado na Documentação e em links de ref como https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:32961403234212 …. Por isso questiono, SERÁ que essa montoeira de DISTINCTs que vc enfiou na sua query principal E nas sub-queries tá funcionando ?? Talvez não, VERIFIQUE isso…

        2. sobre o mecanismo do GROUP BY : a idéia dele é vc JUNTAR registros, ‘colando’ n registros em um só e nesse único registro resultante vc pode ter uma Contagem, um MIN, um MAX, uma soma, etc, dos registros ‘juntados’… Por exemplo, digamos que eu tenha estes dados :

        DESENV:SQL>select deptno, ename, sal from scott.emp order by deptno;

        DEPTNO ENAME SAL


           10 CLARK           2450
           10 KING            5000
           10 MILLER          1300
           20 JONES           2975
           20 FORD            3000
           20 ADAMS           1100
           20 SMITH            800
           20 SCOTT           3000
           30 WARD            1250
           30 TURNER          1500
           30 ALLEN           1600
           30 JAMES            950
           30 BLAKE           2850
           30 MARTIN          1250
        

        14 linhas selecionadas.

        DESENV:SQL>

        Se eu montar um Grupo com DEPTNO como chave, os n registros de cada departamento seriam ‘fundidos’ num só, e para cada valor chave do grupo eu posso ter um MAX, MIN, SUM, etc… Digamos que eu opte por uma Contagem :

        DESENV:SQL>select deptno, count(ENAME) from scott.emp group by DEPTNO order by deptno;

        DEPTNO COUNT(ENAME)


           10            3
           20            5
           30            6
        

        DESENV:SQL>

        Ou seja, os 3 registros com empregados do depto 10 foram fundidos num só E eu contei quantos foram juntados, os 5 empregados do departamento 20 foram ‘colados’ num só registro e eu contei a quantidade de registros juntados e cheguei em 5, assim por diante….

        EVIDENTEMENTE, as chaves TEM que se repetir nos registros não agrupados : veja que o nome do empregado no meu caso não se repete (é único) então um eventual GROUP BY DEPTO, ENAME simplesmente Não Ia Funcionar, eu teria n grupos compostos de um só registro…..

        ===> Tão claros os DOIS conceitos ?? Se sim, agora vem a sua resposta : primeiro verifique esse seu GROUP BY, pois pelo que eu entendi, a agrupação que vc quer seria pelo CD_ATENDIMENTO então esse GROUP BY CD_ATENDIMENTO,QTD_A,QTD_B não faria sentido ….
        Agora, se é isso mesmo que vc quer e teu objetivo é simplesmente eliminar os NULLs talvez vc possa simplesmente usar um MAX em cima de cada grupo : veja https://stackoverflow.com/questions/14241429/sql-query-to-group-a-column-and-ignore-null-values para exemplo, o cara tinha um grupo :

        Col1|Col2|Col3| Col4
        |——————–
        |1 | | a | |
        |1 | b | | |
        |1 | | | c |
        |2 | e | | |
        |2 | | f | |
        |2 | | | g |

        e queria Eliminar os nulos, chegando em :

        | COL1 | COL2 | COL3 | COL4 |

        | 1 | b | a | c |
        | 2 | e | f | g |

        a resposta foi :

        select
        col1,
        max(col2) col2,
        max(col3) col3,
        max(col4) col4
        from yourtable
        group by col1;

        ====>>>> PERCEBA que a Solução foi agrupar apenas pela COL1 como chave – POR ISSO eu questionei E questiono esse teu GROUP BY CD_ATENDIMENTO,QTD_A,QTD_B, pelo que entendi na verdade seria GROUP BY CD_ATENDIMENTO com os MAX(QTD_A) e MAX(QTD_B) eliminando os nulos….

        []s

        Chiappa

        #109117
        Avatar de Raphael de OliveiraRaphael de Oliveira
        Participante

          Olá!

          Funcionou perfeitamente!

          Muito obrigado pelas dicas.

          Grande abraço

          #109118
          Avatar photoJosé Laurindo Chiappa
          Moderador

            Blz… Mais importante do que aplicar a técnica é ter entendido os Conceitos que a fundamentam – espero ter atingido esse Objetivo, o que é sempre a minha intenção.

            Abraços,

            Chiappa

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.
          plugins premium WordPress