我有一個複雜的查詢,它連接不同的表以獲取計數。有幾個領域要分組。現在,我想添加一個需要case語句的附加字段。而且這個領域也必須在分組列表中。我最初的查詢看起來像這樣 -在字段組中按字段使用case語句的SQL查詢
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
我試着將它添加在選擇列表中,但沒有奏效。然後我將它添加到兩個地方 - 選擇和分組列表中。那也行不通。
我是該錯誤:
ORA-00904
- CMPN不是有效的列- ORACLE準備的錯誤:
ORA-22818
:子查詢表達式這裏不允許。
我在網上做了一些研究,發現接近但並不完全等同於我的例子。
SQL GROUP BY CASE statement with aggregate function 不知道我理解的問題在這裏 SQL query with count and case statement 這是我需要完全不同的。 http://jerrytech.blogspot.com/2008/04/can-you-group-by-case-statement-in-sql.html (這是接近,但我不需要插入聲明,我試過這種方法,但它並沒有爲我工作)
任何意見,將不勝感激。
我認爲你有一個點那裏。我最初的做法是有兩個查詢 - 一個用於分配每個記錄(DMBR中有100000+)一個CMPN,第二個用於根據該字段進行總計。我正在研究的是在同一個查詢中執行這兩個操作的方法。 – saspert 2011-05-20 21:27:26
@saspert,查詢修改後的答案,查詢 – DRapp 2011-05-20 23:29:38
您的建議似乎有效 - 雖然我想了解您的筆記在查詢。我從來沒有嘗試1,2,3,4組。我似乎注意到EXACT CASE語句需要在兩個地方。即使是輕微的變化也會導致錯誤。 – saspert 2011-05-23 19:00:35