Usuário com melhor resposta
Agrupamento com subselect

Pergunta
-
Ao tentar fazer um select com agrupamento e um subselect com agrupamento, ele pede para agrupar por colunas de interligação entre eles,
SELECT CIT.ITEMID ,IT.NAME ,SUM(CIT.TOTALDALINHA) ,SUM(CIT.QUANTIDADE) , (SELECT SUM(TAXAS.TOTAL) FROM TAXAS WHERE TAXAS.ITEMTRANSIT = CIT.ITEMTRANSIT ) as ValorImpostos FROM TRANSACOES CIT INNER JOIN ITEM IT ON CIT.ITEMID = IT.ITEMID WHERE CIT.DATANOTA >= @DATAINICIAL AND CIT.DATANOTA <= @DATAFINAL GROUP BY CIT.ITEM, IT.NAME
O Sql pede para incluir no group By o campo CIT.ITEMTRANSIT , mas se agrupar por este campo, ele me traz por NF e perde toda razão da soma.
Respostas
-
Experimente dessa forma:
with CTE_Taxas as ( SELECT CIT.ITEMTRANSIT, SUM(TX.TOTAL) AS ValorImpostos FROM TRANSACOES CIT INNER JOIN TAXAS TX ON TX.ITEMTRANSIT = CIT.ITEMTRANSIT WHERE CIT.DATANOTA >= @DATAINICIAL AND CIT.DATANOTA <= @DATAFINAL GROUP BY CIT.ITEMTRANSIT ) SELECT CIT.ITEMID ,IT.NAME ,SUM(CIT.TOTALDALINHA) ,SUM(CIT.QUANTIDADE) ,SUM(TX.ValorImpostos) FROM TRANSACOES CIT INNER JOIN ITEM IT ON CIT.ITEMID = IT.ITEMID INNER JOIN CTE_Taxas TX ON TX.ITEMTRANSIT = CIT.ITEMTRANSIT WHERE CIT.DATANOTA >= @DATAINICIAL AND CIT.DATANOTA <= @DATAFINAL GROUP BY CIT.ITEM ,IT.NAME
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Durval RamosModerator quarta-feira, 5 de novembro de 2014 18:33
- Marcado como Resposta William_droops quinta-feira, 6 de novembro de 2014 11:19
Todas as Respostas
-
William,
Como você esta fazendo uso de funções de agregação em conjunto com as colunas no mesmo Select, por padrão e regra o SQL Server requer que todas a colunas que não estão em uso com funções de agregação sejam declaradas no Select no lista do Group By.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com
-
-
Boa tarde,
William, como é o relacionamento da tabela Transacoes com a tabela Taxas? É de 1:1, 1:N ou outro?
Assinatura: http://www.imoveisemexposicao.com.br
-
1 : N
é que a tabela de Taxas tem relação com a tabela tipos de taxas
então ficaria assimITEMTRANSIT | TIPOTAXAS | TOTAL |
001 PIS 10,00
001 ICMS 20,00
- Editado William_droops quarta-feira, 5 de novembro de 2014 17:41
-
Experimente dessa forma:
with CTE_Taxas as ( SELECT CIT.ITEMTRANSIT, SUM(TX.TOTAL) AS ValorImpostos FROM TRANSACOES CIT INNER JOIN TAXAS TX ON TX.ITEMTRANSIT = CIT.ITEMTRANSIT WHERE CIT.DATANOTA >= @DATAINICIAL AND CIT.DATANOTA <= @DATAFINAL GROUP BY CIT.ITEMTRANSIT ) SELECT CIT.ITEMID ,IT.NAME ,SUM(CIT.TOTALDALINHA) ,SUM(CIT.QUANTIDADE) ,SUM(TX.ValorImpostos) FROM TRANSACOES CIT INNER JOIN ITEM IT ON CIT.ITEMID = IT.ITEMID INNER JOIN CTE_Taxas TX ON TX.ITEMTRANSIT = CIT.ITEMTRANSIT WHERE CIT.DATANOTA >= @DATAINICIAL AND CIT.DATANOTA <= @DATAFINAL GROUP BY CIT.ITEM ,IT.NAME
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Durval RamosModerator quarta-feira, 5 de novembro de 2014 18:33
- Marcado como Resposta William_droops quinta-feira, 6 de novembro de 2014 11:19
-