このトピックに関するサイトの検索を試みましたが、私の質問に答えたものが見つかりませんでした。私はこれがとてもシンプルだと感じています。HAVING句の中のCASE文の使い方
Unvouchered Purchase Ordersを検索するための簡単なSQLクエリを作成しています。購入注文タイプがPurchaseかCreditかによって、HAVING句に異なるロジックが必要です。データを取得するために、私は2つの異なるクエリを書く必要がありました。私がしたいことは一つにこれらの2つのクエリを組み合わせることであるが、私は使用してそれらを結合しようとすると、私はエラーに実行しています
購入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
次のコードサンプルを参照してください。 HAVING句のCASE文。最近の試みでは、HAVING句の=と<記号に構文エラーが表示されています。私は明らかに何か重要なことを見逃しています。
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
ご意見やご協力をいただければ幸いです。
ありがとうVKP!しかし、私はまだ構文エラーを取得しています。 HAVING句の各行の構文エラーが終了しました)。 –
'case'に' end'がありませんでした。編集したバージョンを試してみてください。それが正常に動作しているかどうかを確認してください.i purchaseorder_typeのグループも削除しました。 –
それは動作します!どうもありがとうございます! –