【发布时间】:2015-03-24 17:23:52
【问题描述】:
由于必须对特定字段使用 GROUP BY,因为它位于 CASE WHEN 子句中,因此我无法返回唯一记录。这是查询:
SELECT L.COLUMN1 AS COL1,
ROUND(L.COLUMN2 * 1000) AS COL2,
CASE
WHEN L.COLUMN3 >= 20 AND L.COLUMN4 = 3
THEN 'Y'
ELSE 'N'
END AS COMPLETED,
CASE
WHEN COUNT(DISTINCT VC.COLUMN5)= 0
OR (COUNT(DISTINCT VC.COLUMN5) > 0
AND SUM(VC.COLUMN10) =SUM(VC.COLUMN11))
THEN 'Y'
WHEN COUNT(DISTINCT VC.COLUMN5) > 0
AND SUM(VC.COLUMN10) <>SUM(VC.COLUMN11)
AND VC.COLUMN8 IN (SELECT S.CODE_ID FROM TABLE5 S
WHERE S.COLUMN6 = 'C' AND S.COLUMN7 = 'SVS')
THEN 'S'
ELSE 'N'
END AS YNS,
NVL(
CASE
WHEN COUNT(DISTINCT LL.COLUMN12)> 0
THEN 'N'
ELSE 'Y'
END,'Y') AS YN
FROM TABLE1 L
LEFT OUTER JOIN TABLE2 VC
ON L.COLUMN1 = VC.COLUMN5
LEFT OUTER JOIN TABLE3 LL
ON L.COLUMN9 = LL.COLUMN9
AND LL.COLUMN1 = L.COLUMN1
WHERE L.OIIN='O'
AND L.COLUMN3 < 90
GROUP BY L.COLUMN1,
L.COLUMN2 ,
L.COLUMN3,
L.COLUMN4,
VC.COLUMN8;
这里导致重复的部分是
WHEN COUNT(DISTINCT VC.COLUMN5) > 0
AND SUM(VC.COLUMN10) <>SUM(VC.COLUMN11)
AND VC.COLUMN8 IN (SELECT S.CODE_ID FROM TABLE5 S
WHERE S.COLUMN6 = 'C' AND S.COLUMN7 = 'SVS')
THEN 'S'
因为它的末尾有 GROUP BY VC.COLUMN8。如果我删除该组,那么我会收到错误,即这不是按表达式分组。如果 COL1 的任何记录符合以下要求,我如何删除组并仅返回表中 COL1 的唯一记录,在该表中我仍然会填充“S”?
WHEN COUNT(DISTINCT VC.COLUMN5) > 0
AND SUM(VC.COLUMN10) <>SUM(VC.COLUMN11)
AND VC.COLUMN8 IN (SELECT S.CODE_ID FROM TABLE5 S
WHERE S.COLUMN6 = 'C' AND S.COLUMN7 = 'SVS')
THEN 'S'
【问题讨论】: