Pular para o conteúdo
  • Este tópico contém 5 respostas, 3 vozes e foi atualizado pela última vez 8 anos, 8 meses atrás por Avatar de Marcos AlvarengaMarcos Alvarenga.
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #108020
    Avatar de João VitorJoão Vitor
    Participante

      Boa tarde a todos.
      Poderiam me ajudar com uma query ?

      Supondo:

      TABELA DADOS

      COD_DAD DATA …. OUTROS N CAMPOS QUE NÃO PRECISO NA QUERY

      1 2016-01-13
      2 2016-01-13
      3 2016-01-13
      4 2016-01-13
      5 2016-01-13
      6 2016-01-13
      7 2016-01-13

      TABELA DETALHE_DADOS

      COD_DAD QTD VLR_RECEB TP_REG

      1 01 25.00 60
      2 01 35.00 60
      3 01 45.00 63
      4 01 15.00 63
      5 01 25.00 68
      6 01 35.00 68
      7 01 75.00 68

      Faço um join ( DADOS.COD_DAD = DETALHE_DADOS.COD_DAD

      Há uma regra de negócio onde registros com TP_REG = 68 , recebem R$1.35 a mais no valor:
      Então fiz a query:


      SELECT

      DATA ,

      DECODE (
      TP_REG ,

      60 , SUM(d.vlr_receb) ,
      63 , SUM(d.vlr_receb) ,
      63 , SUM(d.vlr_receb) ,
      68 , sum(d.qtd_passag_trans)*1.35 + sum(d.vlr_receb) ,
      SUM(D.VLR_RECEB) ) VLR_TOTAL

      FROM

      DADOS ,
      DETALHE_DADOS

      WHERE

      DADOS.COD_DAD = DETALHE_DADOS.COD_DAD AND
      DADOS.DATA BETWEEN '13-JAN-2016' AND '13-JAN-2016'

      GROUP BY

      DADOS.DATA ,
      DETALHE_DADOS.TP_REG ,
      DETALHE_DADOS.QTD ,
      DETALHE_DADOS.VLR_RECEB

      Ai esta a duvida:

      Somando o resultado , obtendo o valor pretendido , mas os registros vem em 3 linhas , uma para cada TP_REG.

      13/01/2016 55.00
      13/01/2016 60.00
      13/01/2016 139.05

      Gostaria de que a query me trouxesse o total em uma única linha , ex:

      13/01/2016 254.05

      Como eu posso fazer esse agrupamento ?

      #108021
      Avatar de rmanrman
      Participante

        @João Vitor

        Tente assim


        SELECT

        DATA ,

        DECODE (
        TP_REG ,

        60 , SUM(d.vlr_receb) ,
        63 , SUM(d.vlr_receb) ,
        63 , SUM(d.vlr_receb) ,
        68 , sum(d.qtd_passag_trans)*1.35 + sum(d.vlr_receb) ,
        SUM(D.VLR_RECEB) ) VLR_TOTAL

        FROM

        DADOS ,
        DETALHE_DADOS

        WHERE

        DADOS.COD_DAD = DETALHE_DADOS.COD_DAD AND
        DADOS.DATA BETWEEN '13-JAN-2016' AND '13-JAN-2016'

        GROUP BY

        DADOS.DATA

        #108022
        Avatar de João VitorJoão Vitor
        Participante

          rman ,

          Obrigado pela resposta.
          Por usar funções de grupo, sou forçado a colocar TP_REG , VLR_RECEB e QTD_PASSAG_TRANS no GROUP BY. Já havia tentado assim.

          Alguma outra dica ?

          #108023
          Avatar de rmanrman
          Participante

            @João Vitor

            Executou?

            VLR_RECEB e QTD_PASSAG_TRANS estão utilizando função de agrupamento, logo não precisa estar listado no GROUP BY.

            E TP_REG não é listado no SELECT é apenas para selecionar o caso e mostrar o somatório adequado.

            Deu erro na execução?

            #108024
            Avatar de João VitorJoão Vitor
            Participante

              Não executou rman.
              not a GROUP BY expression.
              E marca a linha onde esta o TP_REG.

              obrigado.

              #108091
              Avatar de Marcos AlvarengaMarcos Alvarenga
              Participante

                TENTA ASSIM :

                SELECT
                DATA ,
                NULL as VLR_TOTAL

                FROM DADOS ,
                DETALHE_DADOS

                WHERE
                DADOS.COD_DAD = DETALHE_DADOS.COD_DAD AND
                DADOS.DATA BETWEEN ’13-JAN-2016′ AND ’13-JAN-2016′

                union

                SELECT ‘ ‘ as DATA,
                DECODE ( TP_REG ,
                60 , SUM(d.vlr_receb) ,
                63 , SUM(d.vlr_receb) ,
                63 , SUM(d.vlr_receb) ,
                68 , sum(d.qtd_passag_trans)*1.35 + sum(d.vlr_receb) ,
                SUM(D.VLR_RECEB) )as VLR_TOTAL
                GROUP BY
                DADOS.DATA ,
                DETALHE_DADOS.TP_REG ,
                DETALHE_DADOS.QTD ,
                DETALHE_DADOS.VLR_RECEB

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