webForumDet fria alternativet

SQL-fråga som tar med även tomma fält.

Databaser & SQL

2 svar · 220 visningar · startad av solbulle

Medlem sedan mars 20015 287 inlägg
Frågan#1

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
Medlem sedan juni 200032 967 inlägg
#2

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

Vad är det för dbms du använder förresten?

Medlem sedan mars 20015 287 inlägg
#3

Jag tackar för svaret och försöker få till det.

Jag använder SQL-Base (Gupta)

258 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)