- Este tópico contém 5 respostas, 3 vozes e foi atualizado pela última vez 8 anos, 8 meses atrás por Marcos Alvarenga.
-
AutorPosts
-
3 de fevereiro de 2016 às 11:53 pm #108020João VitorParticipante
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-13TABELA 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 68Faç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:
SELECTDATA ,
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_TOTALFROM
DADOS ,
DETALHE_DADOSWHERE
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_RECEBAi 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.05Gostaria de que a query me trouxesse o total em uma única linha , ex:
13/01/2016 254.05
Como eu posso fazer esse agrupamento ?
4 de fevereiro de 2016 às 2:10 pm #108021rmanParticipante@João Vitor
Tente assim
SELECTDATA ,
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_TOTALFROM
DADOS ,
DETALHE_DADOSWHERE
DADOS.COD_DAD = DETALHE_DADOS.COD_DAD AND
DADOS.DATA BETWEEN '13-JAN-2016' AND '13-JAN-2016'GROUP BY
DADOS.DATA
4 de fevereiro de 2016 às 2:34 pm #108022João VitorParticipanterman ,
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 ?
4 de fevereiro de 2016 às 2:55 pm #108023rmanParticipante@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?
4 de fevereiro de 2016 às 3:27 pm #108024João VitorParticipanteNão executou rman.
not a GROUP BY expression.
E marca a linha onde esta o TP_REG.obrigado.
24 de março de 2016 às 11:38 pm #108091Marcos AlvarengaParticipanteTENTA ASSIM :
SELECT
DATA ,
NULL as VLR_TOTALFROM DADOS ,
DETALHE_DADOSWHERE
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 -
AutorPosts
- Você deve fazer login para responder a este tópico.