Usuário com melhor resposta
Agrupamento e Soma de valores utilizando Case

Pergunta
-
Boa tarde!
Estou com dificuldade em realizar uma rotina para me retornar os valores agrupados utilizando Case entre duas tabelas
A principio segue minha consulta, mas se tiverem alguma alternativa melhor, sera muito bem vinda.
desde ja agradeço a ajuda de todos.
SELECT LOC.NOMEFANTASIA, VEI.PLACAVEICULO, CON.NOMECONTA, VEI.PLACAVEICULO,
(CASE WHEN PNE.CAMPO2 = 'TROC_CONSERT_PNEU' THEN SUM(PNE.TOTALSERVIVO) ELSE 0 END) AS GASTCOM_PNEU,
(CASE WHEN PNE.CAMPO2 = 'MANUTENCAO_ELETRICA' THEN SUM(PNE.TOTALSERVIVO) ELSE 0 END) AS GASTCOM_ELETRICA,
(CASE WHEN PNE.CAMPO2 = 'MANUTENCAO_MECANICA' THEN SUM(PNE.TOTALSERVIVO) ELSE 0 END) AS GASTCOM_MECANICA,
(CASE WHEN PNE.CAMPO2 = 'MANUTENCAO_PINTURA' THEN SUM(PNE.TOTALSERVIVO) ELSE 0 END) AS GASTCOM_PINTURA
FROM tbl_Frota_CadVeiculo VEI
LEFT JOIN tbl_Frota_ServicosPNEUS PNE ON(VEI.CODIGO = PNE.CAMPO1)
LEFT JOIN TBL_LOCALIDADES LOC ON(LOC.CODIGO = VEI.CODBASE)
LEFT JOIN TBL_CONTACG CON ON(CON.CODIGOCONTA = VEI.CODPROJETO)
GROUP BY LOC.NOMEFANTASIA, CON.NOMECONTA, VEI.PLACAVEICULO , PNE.CAMPO2
ORDER BY VEI.PLACAVEICULO , PNE.CAMPO2
- Editado Maseroli segunda-feira, 17 de março de 2014 16:44
Respostas
Todas as Respostas
-
Maseroli,
Tente adaptar seu script para o modelo abaixo:
SELECT NOMEFANTASIA, PLACAVEICULO, NOMECONTA, SUM(GASTCOM_PNEU) AS PNEU, SUM(GASTCOM_ELETRICA) AS ELETRICA, SUM(GASTCOM_MECANICA) AS MECANICA, SUM(GASTCOM_PINTURA) AS PINTURA FROM ( SELECT LOC.NOMEFANTASIA, VEI.PLACAVEICULO, CON.NOMECONTA, (CASE WHEN PNE.CAMPO2 = 'TROC_CONSERT_PNEU' THEN SUM(PNE.TOTALSERVIVO) ELSE 0 END) AS GASTCOM_PNEU, (CASE WHEN PNE.CAMPO2 = 'MANUTENCAO_ELETRICA' THEN SUM(PNE.TOTALSERVIVO) ELSE 0 END) AS GASTCOM_ELETRICA, (CASE WHEN PNE.CAMPO2 = 'MANUTENCAO_MECANICA' THEN SUM(PNE.TOTALSERVIVO) ELSE 0 END) AS GASTCOM_MECANICA, (CASE WHEN PNE.CAMPO2 = 'MANUTENCAO_PINTURA' THEN SUM(PNE.TOTALSERVIVO) ELSE 0 END) AS GASTCOM_PINTURA FROM tbl_Frota_CadVeiculo VEI LEFT JOIN tbl_Frota_ServicosPNEUS PNE ON(VEI.CODIGO = PNE.CAMPO1) LEFT JOIN TBL_LOCALIDADES LOC ON(LOC.CODIGO = VEI.CODBASE) LEFT JOIN TBL_CONTACG CON ON(CON.CODIGOCONTA = VEI.CODPROJETO) GROUP BY LOC.NOMEFANTASIA, CON.NOMECONTA, VEI.PLACAVEICULO , PNE.CAMPO2 ORDER BY VEI.PLACAVEICULO , PNE.CAMPO2 ) AS TBL GROUP BY NOMEFANTASIA, PLACAVEICULO, NOMECONTA
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 19 de março de 2014 17:59
-
Boa tarde,
Maseroli, experimente dessa forma:
SELECT LOC.NOMEFANTASIA, VEI.PLACAVEICULO, CON.NOMECONTA SUM(CASE WHEN PNE.CAMPO2 = 'TROC_CONSERT_PNEU' THEN PNE.TOTALSERVIVO ELSE 0 END) AS GASTCOM_PNEU, SUM(CASE WHEN PNE.CAMPO2 = 'MANUTENCAO_ELETRICA' THEN PNE.TOTALSERVIVO ELSE 0 END) AS GASTCOM_ELETRICA, SUM(CASE WHEN PNE.CAMPO2 = 'MANUTENCAO_MECANICA' THEN PNE.TOTALSERVIVO ELSE 0 END) AS GASTCOM_MECANICA, SUM(CASE WHEN PNE.CAMPO2 = 'MANUTENCAO_PINTURA' THEN PNE.TOTALSERVIVO ELSE 0 END) AS GASTCOM_PINTURA FROM tbl_Frota_CadVeiculo VEI LEFT JOIN tbl_Frota_ServicosPNEUS PNE ON(VEI.CODIGO = PNE.CAMPO1) LEFT JOIN TBL_LOCALIDADES LOC ON(LOC.CODIGO = VEI.CODBASE) LEFT JOIN TBL_CONTACG CON ON(CON.CODIGOCONTA = VEI.CODPROJETO) GROUP BY LOC.NOMEFANTASIA, CON.NOMECONTA, VEI.PLACAVEICULO ORDER BY VEI.PLACAVEICULO
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
-
-
Muito Obrigado pela ajuda, sua interação funcionou certinho
segue resultado abaixo
Maseroli,
Por favor, marque também a resposta do gapimex para premiar à ajuda que ele fez para você.
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Editado Durval RamosModerator segunda-feira, 17 de março de 2014 18:19