Fórum Consulta SQL Server Ordenada #575158
21/02/2017
0
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
Curtir tópico
+ 0Post mais votado
21/02/2017
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 ASCFabiano Carvalho
Gostei + 1
Mais Posts
21/02/2017
Marcos Queiroz
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 ASCFaabiianooc
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?
Gostei + 0
21/02/2017
Fabiano Carvalho
Mas de qualquer forma, é sempre bom replicar o que está no SELECT para o group by. ;)
Gostei + 1
21/02/2017
Marcos Queiroz
Valeu a ajuda, agora vou tentar incrementar mais ainda o código :)
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)