无法删除子查询重复项

时间:2015-11-09 21:19:40

标签: sql db2

我之前构建了一个查询,返回零重复,直到我决定加入几个表。现在我加入了它们,由于返回了重复项,我无法创建所需的标记。我已经将下面的情景作为一个例子。

我只希望每个参考编号出现一次(123456789)。我想在满足某些条件时创建一个标志。例如,我想查看某个帐户的参考号何时符合" X",但是当我加入表时,我会在连接表中获得该参考号的每个实例。

REFNO       BEG   END   STATUS
123456789   123   456     E
123456789   456   789     E
123456789   789   012     A

我希望根据查询中设置的其他参数查看所有REFNO,但我想要一个END =' 012'的任何标志。我无法加入桌面,因为我将获得所有三条线。如果我进行内部连接,那么我只需要获得012行。我在我的选择语句中尝试了下面的代码,只在该场景存在时拉动,但我得到了古怪的回报并且不知道为什么。我觉得这应该很容易实现,但我无法解决如何为该场景创建一个标志而不会出现重复或通过内部联接删除结果。

,(CASE WHEN EXISTS(SELECT 1
FROM QW.ABCD Z 
WHERE Z.ABCD = P.ABCD
AND Z.END = '012'
AND Z.TIMESTAMP IS NULL
AND Z.STATUS IN ('A','E'))
THEN 'Y' ELSE 'N'
END)  
AS "FLAG"

请帮忙,因为我不知道自己错误地拿到了我想看到的旗帜。

1 个答案:

答案 0 :(得分:0)

我不确定id DB2是否允许UNION和GROUP BY的组合,但你想要的可能是这样的:

SELECT 'N' AS FLAG, REF_NO,MIN(BEG),MAX(THEEND) FROM TAB_QW A
WHERE NOT EXIST (SELECT * FROM TAB_QW B WHERE B.REF_NO = A.REF_NO AND B.THEEND = '012')
GROUP BY REF_NO
UNION
SELECT 'Y' AS FLAG, REF_NO,MIN(BEG),MAX(THEEND) FROM TAB_QW C
WHERE EXISTS (SELECT * FROM TAB_QW D WHERE D.REF_NO = C.REF_NO AND D.THEEND = '012')
GROUP BY REF_NO