Jag har en fråga som plockar ut varje dags försäljning (om det finns någon) av angivna produkter på en angiven kundgrupp listat per kund.
Nu vill jag göra min fråga än mer dynamisk så att man skall även lista de angivna kunderna även fast de kanske inte köpt produkten, hur kan jag lösa det tro?
Jag är dock osäker på att det verkligen går att göra direkt i sql-frågan.
Annars är tips på hur jag kan lösa det ändå tacksamt.
Jag utgår från denna SQL-fråga (förenklad från orginalet, men det nödvändiga är kvar.):
select @SUBSTRING(tblORDER.LEVVECKA,5,3), LEVDAG, tblARTIKEL.ARTNR, tblARTIKELDATA.ARTNAMN, tblORDER.ordtyp, SUM(ANTAL),
SUM(antal*pris), tblKUND.kundnr, tblKEDJA ,tblKUND.kndgrp
from tblORDER, ORA, tblARTIKEL, tblARTIKELDATA, DPL, tblKUND, KEDJA
where tblORDER.ORDNR = ORA.ORDNR
and ORA.ARTNR = tblARTIKEL.ARTNR and ORA.ARTNR = tblARTIKELDATA.ARTNR
and tblORDER.KNDNR = tblKUND.KUNDNR and tblKUND.KEDJA = tblKEDJA.KEDJA
and (tblARTIKEL.ARTNR = '1234' or tblARTIKEL.ARTNR = '5678') and tblORDER.LEVVECKA = '2004-35'
group by tblORDER.LEVVECKA, LEVDAG, tblARTIKEL.ARTNR, osv
Jo, det går bra att lösa om du använder outer joins. Mitt förslag är att du skriver om SQL-frågan till join-syntax, och knyter in kundtabellen med en outer join. Något sånt här skulle det eventuellt kanske kunna se ut, dock med reservation för att det är för tidigt på morgonen. ;-)
select @SUBSTRING(tblORDER.LEVVECKA,5,3), LEVDAG, tblARTIKEL.ARTNR, tblARTIKELDATA.ARTNAMN, tblORDER.ordtyp, SUM(ANTAL),
SUM(antal*pris), tblKUND.kundnr, tblKEDJA ,tblKUND.kndgrp
FROM tblORDER
INNER JOIN ORA ON tblORDER.ORDNR = ORA.ORDNR
INNER JOIN tblARTIKEL ON ORA.ARTNR = tblARTIKEL.ARTNR
INNER JOIN tblARTIKELDATA ON ORA.ARTNR = tblARTIKELDATA.ARTNR
LEFT JOIN tblKUND ON tblORDER.KNDNR = tblKUND.KUNDNR
INNER JOIN tblKEDJA ON tblKUND.KEDJA = tblKEDJA.KEDJA
WHERE
(tblARTIKEL.ARTNR = '1234' or tblARTIKEL.ARTNR = '5678') and tblORDER.LEVVECKA = '2004-35'
GROUP BY tblORDER.LEVVECKA, LEVDAG, tblARTIKEL.ARTNR, osv