Fórum Consulta SQL Server Ordenada #575158

21/02/2017

0

Bom dia, amigos.

Antes de mais nada, gostaria de dizer que pesquisei aqui no fórum (e outros também) sobre este assunto, encontrei vários casos similares mas nenhum deles me ajudou efetivamente, por isso esta postagem aqui.

Estou realizando uma consulta em que preciso unir duas tabelas e que ela mostra somente os clientes pertinentes à consulta, que filtrei por meio da cláusula WHERE.
O código que escrevi é este:

SELECT T0.CardCode as 'Código',
CASE T0.GroupCode WHEN '109' THEN 'Brokers Supreme' WHEN '110' THEN 'Distribuidores' WHEN '112' THEN 'Distribuição Direta' WHEN '116' THEN 'Eventos' ELSE 'Outros' END as 'Tipo de Distribuidor',
T0.CardName as 'Nome do Cliente',

--T1.DocNum as 'Nº nota',
--T1.DocDate as 'Data de Emissão',
T1.DocTotal as 'Total da nota'

FROM OCRD T0 INNER JOIN OINV T1 ON T0.CardName = T1.CardName
WHERE T0.GroupCode in ('109', '110', '112', '116')

GROUP BY T0.CardCode, T0.GroupCode, T0.CardName, T1.DocTotal
ORDER BY T0.CardName ASC

Porém, preciso que, ao executar, seja exibida a tabela com os clientes agrupados em uma única linha, e que o total da nota seja somado e fique toda a informação de cada cliente em uma linha única, porém, o único resultado que consigo é este:

Código Tipo de Distribuidor Nome do Cliente Total da nota

C00326 Distribuição Direta A & G LTDA 633.990000
C00326 Distribuição Direta A & G LTDA 660.010000
C00326 Distribuição Direta A & G LTDA 683.990000
C00326 Distribuição Direta A & G LTDA 803.990000
C00326 Distribuição Direta A & G LTDA 1115.980000
C00326 Distribuição Direta A & G LTDA 1178.000000
C00378 Brokers Supreme ADELINO DO NASCIMENTO 472.000000
C00378 Brokers Supreme ADELINO DO NASCIMENTO 584.000000
C00378 Brokers Supreme ADELINO DO NASCIMENTO 1111.980000
C00378 Brokers Supreme ADELINO DO NASCIMENTO 1255.980000
C00256 Distribuição Direta ADIMIR TELLES 634.000000
C00256 Distribuição Direta ADIMIR TELLES 651.980000
C00256 Distribuição Direta ADIMIR TELLES 1525.970000

Pode ter alguma relação com o número da nota fiscal, mesmo ele não trazendo a informação na consulta?
Marcos Queiroz

Marcos Queiroz

Responder

Post mais votado

21/02/2017

Voce precisa usar uma função de agregação, nesse caso SUM

SELECT T0.CardCode as 'Código',
CASE T0.GroupCode WHEN '109' THEN 'Brokers Supreme' WHEN '110' THEN 'Distribuidores' WHEN '112' THEN 'Distribuição Direta' WHEN '116' THEN 'Eventos' ELSE 'Outros' END as 'Tipo de Distribuidor',
T0.CardName as 'Nome do Cliente',
Sum(T1.DocTotal) as 'Total da nota'
FROM OCRD T0 INNER JOIN OINV T1 ON T0.CardName = T1.CardName
WHERE T0.GroupCode in ('109', '110', '112', '116')
GROUP BY T0.CardCode,CASE T0.GroupCode WHEN '109' THEN 'Brokers Supreme' WHEN '110' THEN 'Distribuidores' WHEN '112' THEN 'Distribuição Direta' WHEN '116' THEN 'Eventos' ELSE 'Outros' END,T0.CardName
ORDER BY T0.CardName ASC

Fabiano Carvalho

Fabiano Carvalho
Responder

Gostei + 1

Mais Posts

21/02/2017

Marcos Queiroz

Voce precisa usar uma função de agregação, nesse caso SUM

SELECT T0.CardCode as ''Código'',
CASE T0.GroupCode WHEN ''109'' THEN ''Brokers Supreme'' WHEN ''110'' THEN ''Distribuidores'' WHEN ''112'' THEN ''Distribuição Direta'' WHEN ''116'' THEN ''Eventos'' ELSE ''Outros'' END as ''Tipo de Distribuidor'',
T0.CardName as ''Nome do Cliente'',
Sum(T1.DocTotal) as ''Total da nota''
FROM OCRD T0 INNER JOIN OINV T1 ON T0.CardName = T1.CardName
WHERE T0.GroupCode in (''109'', ''110'', ''112'', ''116'')
GROUP BY T0.CardCode,CASE T0.GroupCode WHEN ''109'' THEN ''Brokers Supreme'' WHEN ''110'' THEN ''Distribuidores'' WHEN ''112'' THEN ''Distribuição Direta'' WHEN ''116'' THEN ''Eventos'' ELSE ''Outros'' END,T0.CardName
ORDER BY T0.CardName ASC



Faabiianooc

Muito obrigado, funcionou perfeitamente.
Eu usei anteriormente a função SUM mas não retornava este resultado. Vi que na correção que você fez, na declaração GROUP BY, você replicou a informação contida no CASE que eu não tinha feito.

Isso implica em alguma coisa na hora de executar o código?
Responder

Gostei + 0

21/02/2017

Fabiano Carvalho

As vezes sim, as vezes não.
Mas de qualquer forma, é sempre bom replicar o que está no SELECT para o group by. ;)
Responder

Gostei + 1

21/02/2017

Marcos Queiroz

Blz, Faabiianooc.

Valeu a ajuda, agora vou tentar incrementar mais ainda o código :)
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar