Pular para o conteúdo
  • Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 11 anos, 3 meses atrás por Avatar de FernandaAcFernandaAc.
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #105726
    Avatar de Gustavo S CoelhoGustavo S Coelho
    Participante

      I’m trying to use a filter for the follow query and im catching some issues wich i’m find quite a bit dificult to sort out.
      The intent is to separate the two blocks in TB and TB2 in a way that i could use TB2 inside of TB and make sure that every objects are on the same context so then i could pass a filter outside using the biggest query on TB.
      The purpose of using TB is because i’m willing to use this query in a view and i need the two columns TB.icms, TB.cd_exercicio to be part of the projection for the view.

      Any knowledge would be appreciated.


      SELECT

      TB.icms,
      TB.cd_exercicio

      FROM (
      SELECT
      TB2.cd_exercicio,
      SUM(
      CASE
      WHEN nr1.cd_natureza_receita >= 1113020000
      AND nr1.cd_natureza_receita <= 1113029999 THEN DECODE(1,1, rmsub.vl_realizado, rmsub.valr_arrecadado) ELSE NULL END ) AS icms FROM receita r INNER JOIN receita_mes rmsub ON rmsub.id_receita = r.id_receita INNER JOIN elaboracao_receita ersub ON (r.id_elaboracao_receita = ersub.id_elaboracao_receita) INNER JOIN natureza_receita nr1 ON (r.id_natureza_receita = nr1.id_natureza_receita AND nr1.cd_exercicio = ersub.cd_exercicio) INNER JOIN ( SELECT elaboracao_receita.cd_exercicio, receita.id_receita, receita.id_elaboracao_receita, receita.id_natureza_receita FROM receita JOIN receita_mes ON (receita_mes.id_receita = receita.id_receita) JOIN elaboracao_receita ON (elaboracao_receita.id_elaboracao_receita = receita.id_elaboracao_receita) JOIN natureza_receita ON (natureza_receita.id_natureza_receita = receita.id_natureza_receita AND natureza_receita.cd_exercicio = elaboracao_receita.cd_exercicio) ) TB2 ON ( TB2.cd_exercicio = nr1.cd_exercicio AND TB2.cd_exercicio = ersub.cd_exercicio AND TB2.id_receita = r.id_receita AND TB2.id_receita = rmsub.id_receita AND TB2.id_elaboracao_receita = r.id_elaboracao_receita AND TB2.id_elaboracao_receita = ersub.id_elaboracao_receita AND TB2.id_natureza_receita = r.id_natureza_receita AND TB2.id_natureza_receita = nr1.id_natureza_receita ) ) TB WHERE 1 = 1 AND TB.CD_EXERCICIO = 2013

      #105727
      Avatar de Gustavo S CoelhoGustavo S Coelho
      Participante

        The issue that i’m facing is throwing this message – 00937. 00000 – “not a single-group group function”

        #105728
        Avatar de Gustavo S CoelhoGustavo S Coelho
        Participante

          The most intresting is that the follow query works fine but when i replace it for the column TB.ICMS i get the issue.
          I tried to put a group by with the two columns i need and didn’t work as well.


          --INNER JOIN INTERNO USANDO JOIN
          SELECT

          TB.CD_EXERCICIO,
          TB.TESTE
          --TB.ICMS

          FROM (
          SELECT
          TB2.cd_exercicio CD_EXERCICIO,
          ('FUNCIONA') TESTE
          /*
          SUM(
          CASE
          WHEN nr1.cd_natureza_receita >= 1113020000
          AND nr1.cd_natureza_receita <= 1113029999
          THEN DECODE(1,1, rmsub.vl_realizado, rmsub.valr_arrecadado)
          ELSE NULL
          END ) ICMS
          */

          FROM receita r
          INNER JOIN receita_mes rmsub
          ON rmsub.id_receita = r.id_receita
          INNER JOIN elaboracao_receita ersub
          ON (r.id_elaboracao_receita = ersub.id_elaboracao_receita)
          INNER JOIN natureza_receita nr1
          ON (r.id_natureza_receita = nr1.id_natureza_receita
          AND nr1.cd_exercicio = ersub.cd_exercicio)

          INNER JOIN (
          SELECT
          elaboracao_receita.cd_exercicio,
          receita.id_receita,
          receita.id_elaboracao_receita,
          receita.id_natureza_receita
          FROM receita
          JOIN receita_mes
          ON (receita_mes.id_receita = receita.id_receita)
          JOIN elaboracao_receita
          ON (elaboracao_receita.id_elaboracao_receita = receita.id_elaboracao_receita)
          JOIN natureza_receita
          ON (natureza_receita.id_natureza_receita = receita.id_natureza_receita AND natureza_receita.cd_exercicio = elaboracao_receita.cd_exercicio)
          ) TB2 ON ( TB2.cd_exercicio = nr1.cd_exercicio
          AND TB2.cd_exercicio = ersub.cd_exercicio
          AND TB2.id_receita = r.id_receita
          AND TB2.id_receita = rmsub.id_receita
          AND TB2.id_elaboracao_receita = r.id_elaboracao_receita
          AND TB2.id_elaboracao_receita = ersub.id_elaboracao_receita
          AND TB2.id_natureza_receita = r.id_natureza_receita
          AND TB2.id_natureza_receita = nr1.id_natureza_receita
          )
          ) TB
          WHERE 1 = 1
          AND TB.CD_EXERCICIO = 2013

          #105731
          Avatar de FernandaAcFernandaAc
          Participante

            Hi @gscoelho!

            I think the group by missing clause is on the TB “table”.

            Try this sugestion bellow (i include “group by TB2.cd_exercicio” ):

            SELECT
            TB.icms, TB.cd_exercicio
            FROM (SELECT TB2.cd_exercicio,
            SUM(CASE
            WHEN nr1.cd_natureza_receita >= 1113020000 AND
            nr1.cd_natureza_receita <= 1113029999 THEN
            DECODE(1, 1, rmsub.vl_realizado, rmsub.valr_arrecadado)
            ELSE
            NULL
            END) AS icms
            FROM receita r
            INNER JOIN receita_mes rmsub ON rmsub.id_receita = r.id_receita
            INNER JOIN elaboracao_receita ersub ON (r.id_elaboracao_receita =
            ersub.id_elaboracao_receita)
            INNER JOIN natureza_receita nr1 ON (r.id_natureza_receita =
            nr1.id_natureza_receita AND
            nr1.cd_exercicio =
            ersub.cd_exercicio)
            INNER JOIN (SELECT elaboracao_receita.cd_exercicio,
            receita.id_receita,
            receita.id_elaboracao_receita,
            receita.id_natureza_receita
            FROM receita
            JOIN receita_mes ON (receita_mes.id_receita =
            receita.id_receita)
            JOIN elaboracao_receita ON (elaboracao_receita.id_elaboracao_receita =
            receita.id_elaboracao_receita)
            JOIN natureza_receita ON (natureza_receita.id_natureza_receita =
            receita.id_natureza_receita AND
            natureza_receita.cd_exercicio =
            elaboracao_receita.cd_exercicio)) TB2 ON (TB2.cd_exercicio =
            nr1.cd_exercicio AND
            TB2.cd_exercicio =
            ersub.cd_exercicio AND
            TB2.id_receita =
            r.id_receita AND
            TB2.id_receita =
            rmsub.id_receita AND
            TB2.id_elaboracao_receita =
            r.id_elaboracao_receita AND
            TB2.id_elaboracao_receita =
            ersub.id_elaboracao_receita AND
            TB2.id_natureza_receita =
            r.id_natureza_receita AND
            TB2.id_natureza_receita =
            nr1.id_natureza_receita)
            group by TB2.cd_exercicio -- include group by
            ) TB
            WHERE 1 = 1
            AND TB.CD_EXERCICIO = 2013

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