我有一个复杂的查询,它连接不同的表来获取计数。有几个字段可以分组。现在,我想添加一个需要 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
我试图将它添加到选择列表中,但它不起作用。然后我在两个地方添加了它 - 在选择和分组列表中。那也没有用。
我得到的错误是:
ORA-00904
- CMPN 不是有效的列- ORACLE 准备错误::
ORA-22818
此处不允许子查询表达式。
我在网上做了一些研究,发现了一些与我的很接近但并不完全相同的例子。
具有聚合函数的 SQL GROUP BY CASE 语句 不确定我是否理解这里的问题 SQL 查询与计数和案例语句 这与我的需要完全不同。 http://jerrytech.blogspot.com/2008/04/can-you-group-by-case-statement-in-sql.html (这很接近,但我不需要插入语句我尝试过这种方法但它没有为我工作)
任何建议,将不胜感激。