Ich habe versucht, die Website für eine Antwort zu diesem Thema, aber konnte nichts finden, die meine Frage beantwortet. Ich habe das Gefühl, das ist sehr einfach.Wie CASE-Anweisung in HAVING-Klausel verwenden
Ich schreibe eine einfache SQL-Abfrage, um bei der Suche nach unbeaufsichtigten Bestellungen zu helfen. Je nachdem, ob die Bestellart Purchase oder Credit ist, wird in der HAVING-Klausel eine andere Logik benötigt. Um die Daten zu bekommen, musste ich zwei verschiedene Abfragen schreiben. Siehe Codebeispiele unten
KAUF PO
select
prchseordr_id as 'PO ID',
max(prchseordr_dte_rqstd) as DateRequested,
max(prchseordr_type) as POType,
max(vndr_nme) as Vendor,
sum(imhstry_qntty_ordrd) as QuantityOrdered,
sum(imhstry_qntty_invcd_ap) as QuantityVouchered
from imhstry
join prchseordr on imhstry.imhstry_ordr_id = prchseordr.prchseordr_id
join brnch on prchseordr.brnch_rn = brnch.brnch_rn
join vndr on prchseordr.vndr_rn = vndr.vndr_rn
where prchseordr_dte_rqstd between '2016-01-01' and '2016-04-01'
and prchseordr_type = 'PURCHASE'
group by prchseordr.prchseordr_id
HAVING sum(imhstry_qntty_invcd_ap) < sum(imhstry_qntty_ordrd)
order by prchseordr_id asc
CREDIT PO
select
prchseordr_id as 'PO ID',
max(prchseordr_dte_rqstd) as DateRequested,
max(prchseordr_type) as POType,
max(vndr_nme) as Vendor,
sum(imhstry_qntty_ordrd) as QuantityOrdered,
sum(imhstry_qntty_invcd_ap) as QuantityVouchered
from imhstry
join prchseordr on imhstry.imhstry_ordr_id = prchseordr.prchseordr_id
join brnch on prchseordr.brnch_rn = brnch.brnch_rn
join vndr on prchseordr.vndr_rn = vndr.vndr_rn
where prchseordr_dte_rqstd between '2016-01-01' and '2016-04-01'
and prchseordr_type = 'CREDIT'
group by prchseordr.prchseordr_id
HAVING sum(imhstry_qntty_invcd_ap) = '0'
order by prchseordr_id asc
Was ich will, ist, diese beiden Abfragen in einem kombinieren, aber ich laufe in Fehler, wenn ich versuche, sie zu kombinieren mit eine CASE-Anweisung in der HAVING-Klausel. Der letzte Versuch wirft mir einen Syntaxfehler auf das Zeichen = und < in der HAVING-Klausel. Mir fehlt offensichtlich etwas Wichtiges.
select
prchseordr_id as 'PO ID',
max(prchseordr_dte_rqstd) as DateRequested,
max(prchseordr_type) as POType,
max(vndr_nme) as Vendor,
sum(imhstry_qntty_ordrd) as QuantityOrdered,
sum(imhstry_qntty_invcd_ap) as QuantityVouchered
from imhstry
join prchseordr on imhstry.imhstry_ordr_id = prchseordr.prchseordr_id
join brnch on prchseordr.brnch_rn = brnch.brnch_rn
join vndr on prchseordr.vndr_rn = vndr.vndr_rn
where prchseordr_dte_rqstd between '2016-01-01' and '2016-04-01'
group by prchseordr.prchseordr_id
HAVING CASE WHEN prchseordr_type = 'Credit' THEN sum(imhstry_qntty_invcd_ap) = '0'
OR CASE WHEN prchseordr_type = 'Purchase' THEN sum(imhstry_qntty_invcd_ap) < sum(imhstry_qntty_ordrd)
order by prchseordr_id asc
Alle Ideen oder Hilfe würde sehr geschätzt werden.
Danke VKP! Ich bekomme jedoch immer noch einen Syntaxfehler. Die Syntaxfehler befinden sich nun beim Schließen) jeder Zeile der HAVING-Klausel. –
das 'case' fehlte ein' end'. Versuchen Sie die bearbeitete Version und sehen Sie, ob es funktioniert. Ich habe auch die Gruppierung auf purchaseorder_type.not sicher darüber entfernt. –
Es funktioniert! Ich danke dir sehr! –