Hej! SELECT AllaKassor.KassaNr, AllaKassor.Typ, Sum(IIf(IsNull(KvittoRabatt.Summa),0,KvittoRabatt.Summa)) AS Summa Tack för svarenKlurig join
Håller på med en join som jag inte riktigt får till.
3 tabeller som förenklat ser ut enligt:
Kvitto
------
KvittoId | KassaNr
1 | 1
2 | 1
3 | 2
4 | 2
KvittoRabatt
--------------
KvittoId | RabattTyp | Summa
1 | 1 | 100
1 | 2 | 300
2 | 1 | 50
3 | 3 | 200
Rabattyp
------------
Typ
1
2
3
4
Vill få ut svaret
KassaNr | RabattTyp | Summa
1 | 1 | 150
1 | 2 | 300
1 | 3 | 0
1 | 4 | 0
2 | 1 | 0
2 | 2 | 0
2 | 3 | 200
2 | 4 | 0
osv ...
Alltså Rabattsumman per kassa & rabbattyp. Det jag har problem med
är att jag för samtliga kassor som finns med i kvitto-tabellen (samtliga
kassor som sålt något) så vill jag summera per rabatttyp oavsätt om denna
rabattyp använts på någon av dessa kassor eller ej.
Ungefär så här ser min sql-fråga ut nu:
select kassanr,IsNull(KvittoRabatt.KvittoId, RabattTyp.Typ) RabattTyp, IsNull(Sum(KvittoRabatt.Summa),0) TotalSumma from KvittoRabatt
left outer join Kvitto ON Kvitto.KvittoId=KvittoRabatt.KvittoId
right outer join Rabattyp on KvittoRabatt.RabattTyp=Rabattyp.Typ
group by KassaNr, IsNull(KvittoRabatt.KvittoId, RabattTyp.Typ)
order by KassaNr, IsNull(KvittoRabatt.KvittoId, RabattTyp.Typ)
men då får jag följande output:
KassaNr | RabattTyp | Summa
Null | 4 | 0
1 | 1 | 150
1 | 2 | 300
2 | 3 | 200
osv ...
Hur ska jag göra för att få till detta? (Kan tilläga att det inte finns någon tabell som definerar vilka kassor som finns)
Med Vänliga Hälsningar
/ StefanSv: Klurig join
SELECT Kvitto.KassaNr, KvittoRabatt.RabattTyp, SUM(KvittoRabatt.Summa) AS Summa
FROM (KvittoRabatt INNER JOIN
Kvitto ON KvittoRabatt.KvittoId= Kvitto.KvittoId) LEFT JOIN
Rabattyp ON KvittoRabatt.RabattTyp = Rabattyp.Typ
GROUP BY Kvitto.KassaNr, KvittoRabatt.RabattTyp
Sv: Klurig join
FROM
(SELECT KassaNr, Typ
FROM Rabatttyp, (SELECT DISTINCT KassaNr FROM Kvitto)) AS AllaKassor
LEFT JOIN
(SELECT Kvitto.KassaNr, RabattTyp, Summa
FROM Kvitto INNER JOIN KvittoRabatt ON Kvitto.KvittoId = KvittoRabatt.KvittoId) AS KvittoPerKassa
ON (AllaKassor.KassaNr = KvittoPerKassa.KassaNr) AND (AllaKassor.Typ = KvittoPerKassa.RabattTyp)
GROUP BY AllaKassor.KassaNr, AllaKassor.Typ;Sv:Klurig join
#Andreas: Din fråga ger samma output som den som jag skrev. Får bara med de rabattyper per kassa som använts på den kassan. Vill ha med alla rabattyper och summa=0 om inget kvitto med den rabattypen på kassan.
#Åsa: ... testar din fråga ...