- Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 11 anos, 3 meses atrás por FernandaAc.
-
AutorPosts
-
1 de agosto de 2013 às 11:10 pm #105726Gustavo S CoelhoParticipante
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.
SELECTTB.icms,
TB.cd_exercicioFROM (
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 = 20131 de agosto de 2013 às 11:16 pm #105727Gustavo S CoelhoParticipanteThe issue that i’m facing is throwing this message – 00937. 00000 – “not a single-group group function”
1 de agosto de 2013 às 11:45 pm #105728Gustavo S CoelhoParticipanteThe 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
SELECTTB.CD_EXERCICIO,
TB.TESTE
--TB.ICMSFROM (
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
2 de agosto de 2013 às 10:57 pm #105731FernandaAcParticipanteHi @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
-
AutorPosts
- Você deve fazer login para responder a este tópico.