異なるテーブルを結合してカウントを取得する複雑なクエリがあります。グループ化するフィールドがいくつかあります。ここで、case ステートメントが必要なフィールドを追加したいと思います。また、このフィールドもグループ化リストに含まれている必要があります。私のクエリはもともと次のようになります-
SELECT DMAGATR.WRK_LOC_LEVEL4
, DMBR.WRK_LOC_NM
, DMBR.RELCD
, COUNT(DISTINCT DMBR.DMBRKEY) AS ELIG_COUNT
FROM DMBR
INNER JOIN DCUST DCUST ON DMBR.DCUSTKEY = DCUST.DCUSTKEY
INNER JOIN DMAGATR DMAGATR ON DMBR.DMBRKEY = DMAGATR.DMBRKEY
LEFT JOIN DMDYNATR DMDYNATR ON DMBR.DMBRKEY = DMDYNATR.DMBRKEY
WHERE DMBR.C_TIMESSTAMP <= '12/31/2011'
AND DMBR.RELCD IN ('0', '1')
AND DMBR.EE_STS IN ( 'A','L')
AND (DMBR.DEL_DT IS NULL
OR DMBR.DEL_DT > '12/31/2011')
AND DCUST.PRCD = 'TAR'
GROUP BY DMAGATR.WRK_LOC_LEVEL4, DMBR.WRK_LOC_NM, D_MEMBER.REL_CD
しかし、新しいフィールドは次のようになります -
(SELECT CASE
WHEN (DMBR.WRK_LOC_NM = '6' AND DMBR.GDR = 'M' AND DMBR.REL_CD in ('0','1')
AND DMBR.EE_STS IN ('A','L')) THEN 'SEG 1'
ELSE 'OTHER'
END
FROM DMBR) as CMPN
選択リストに追加しようとしましたが、機能しませんでした。次に、select と group by リストの 2 つの場所に追加しました。それもうまくいきませんでした。
私が得たエラーは次のとおりです。
ORA-00904
- CMPN が有効な列ではありません- ORACLE 準備エラー:
ORA-22818
: サブクエリ式はここでは許可されていません。
私はオンラインでいくつかの調査を行いましたが、私のものに近いが完全に同一ではない例が見つかりました。
集計関数を使用した SQL GROUP BY CASE ステートメント ここで質問を理解したかどうかわからない count および case ステートメントを使用した SQL クエリ これは私のニーズとはかなり異なります。 http://jerrytech.blogspot.com/2008/04/can-you-group-by-case-statement-in-sql.html (これは近いですが、挿入ステートメントは必要ありません。このアプローチを試しましたが、そうではありませんでした私のために働く)
任意の提案をいただければ幸いです。