Just nu i M3-nätverket
Gå till innehåll

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


ns

Rekommendera Poster

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

Länk till kommentar
Dela på andra webbplatser

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

 

Länk till kommentar
Dela på andra webbplatser

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

 

Länk till kommentar
Dela på andra webbplatser

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.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...