Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,estou quebrando a cabeça pra fazer funcionar um select que na teoria seria simples!eu tenho uma tabela de faturas, e nela tem todas as faturas, tanto de 2006 quanto de 2007.e o que eu queria do LEFT JOIN é pegar todas as faturas de 2006 e ver a quantidade delas para cada cliente, porém preciso que mostre todos os clientes e não apenas os que tem fatura.Pois os que nao tiver quero que jogue o valor zero.Mais já tentei de todos os jeitos que eu sei e não deu certo.Obrigado desde já galera.
Então até deu certo, mas quando eu coloquei as datas foi pro mesmo problema que eu estava enfrentando.Pois eu preciso pegar as faturas de um determinado periodo.E se o cliente não existir neste periodo é pra vir o valor zerado!mesmo assim valeu a resposta.Obrigado
Se você precisa tratar um intervalo de datas qualquer e ainda apresentar os clientes que não tem fatura alguma na mesma query, um UNION resolve....
select cli.codcliente, cli.nomecliente,casewhen sum(fat.valor) is nullthen 0else sum(fat.valor)end as totalfrom #cliente cli left join #faturas fat on (cli.codcliente = fat.codcliente)where fat.data >= @Data1 and fat.data <= @Data2group by cli.codcliente, cli.nomeclienteUNIONselect cli.codcliente, cli.nomecliente, 0 as totalfrom #cliente cli left join #faturas fat on (cli.codcliente = fat.codcliente)where fat.codcliente is nullgroup by cli.codcliente, cli.nomeclientego
MisterPe,deu certinho, valeu pela ajuda.Obrigado
Basta testar a condição do JOIN em um case...
set nocount oncreate table #cliente ( codcliente smallint, nomecliente varchar(30))gocreate table #faturas( codcliente smallint, nrofatura smallint, valor money)goinsert #cliente values (1, 'Ana Maria')insert #cliente values (2, 'Pedro')insert #cliente values (3, 'Paulo')goinsert #faturas values (1, 10, 50.00)insert #faturas values (1, 12, 70.00)insert #faturas values (3, 11, 20.00)insert #faturas values (3, 13, 35.00)goselect cli.codcliente, cli.nomecliente, case when sum(fat.valor) is null then 0 else sum(fat.valor) end as totalfrom #cliente cli left join #faturas fat on (cli.codcliente = fat.codcliente)group by cli.codcliente, cli.nomeclientegodrop table #clientedrop table #faturasgoset nocount offResulta...
codcliente nomecliente total
-----------------------------------------
1 Ana Maria 120.0000
2 Pedro .0000
3 Paulo 55.0000