Just nu i M3-nätverket
Jump to content

Få ut allt, även det som inte finns..


ns

Recommended Posts

Jag har för mig att jag frågat detta tidigare men nu hittar jag inte den tråden.

 

Jag har något förenklat en persontabell, en beställningstabell och en produkttabell. Nu vill jag få fram en lista över hur många varor av varje typ som varje person beställt. Så långt inga problem, det jag inte kommer på hur jag ska göra är att jag vill få ut dels alla personer oavsett om dom beställt något eller inte och för varje person vill jag ha ett värde för varje produkt även om dom inte beställt någon sådan (då vill jag ha ut en nolla)

 

Exempel:

Jag har tre produkter A, B och C

Tre personer Kalle, Olle och Lisa.

Kalle har beställt tre stycken A och två stycken B

Olle har inte beställt någonting

Lisa har beställt en B och två C

 

Resultatet jag vill ha ut ska se ut så här:

Kalle 3 2 0

Olle 0 0 0

Lisa 0 1 2

 

Problemet är alltså att dels få med Olle överhuvudtaget, men även att få med 0-orna för Kalle och Lisa.

 

Hur ska jag göra?

 

/Niklas

Link to comment
Share on other sites

select name,(select count(*) 
              from orders 
             where orderedBy = c.id
               and productId = A'),
           (select count(*) 
              from orders 
             where orderedBy = c.id
               and productId = 'B'),
           (select count(*) 
              from orders 
             where orderedBy = c.id
               and productId = 'C')
from customers C

 

eller

 

select name,
sum(case when productId = 'A' then 1 
   else 0 end),
sum(case when productId = 'B' then 1 
   else 0 end),
sum(case when productId = 'C' then 1 
   else 0 end)
from customers C left outer join orders
on c.id = orders.orderedBy

 

Link to comment
Share on other sites

Nu får jag ut värdena som jag vill ha dem med 0-or i rätt fält. OM det däremot inte finns någon beställning öht från en person så syns han inte i listan. Alltså Olle i exemplet ovan kommer inte med. Men det kan kanske bero på att jag har fyra tabeller inblandade och en massa relationer.

 

Jag gick på det nedre exemplet, vilken del av den är det som gör att tomma beställnigar ska synas? Left outer join kanske? Ska jag tänka på något särskilt där isåfall? I min from-del har jag tblPerson leftouter join tblBestallning först och sedan vanliga joins till de andra tabellerna. Ska jag göra på något annat sätt?

 

/Niklas

 

Link to comment
Share on other sites

Det är outer join som gör så att man får med alla poster.

 

a left outer join b on a.id = b.id

 

innebär att man får alla poster från a (den vänstra tabellen) oavsett om det finns någon post i b med ett matchande id.

 

Jag kan inte säga något utan att se frågan.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...