SQL :使用 Case 在单独的列中查找重复项和标记

SQL : Finding duplicates and flag in separate column with Case

我试图在 table 中查找重复项并想添加一个新的标志列。 以下示例数据:

Column A        Column B
1                888
1                999
1                777
2                444
2                444
3                555
4                222

期望的输出:

Column A        Column B         Flag_output
1                888              DUPLICATE
1                999              DUPLICATE
1                777              DUPLICATE
2                444              NULL
2                444              NULL
3                555              NULL
4                222              NULL

情况1:当A列的值相同而B列的值不同时(例如A列的值1) -应标记为 DUPLICATE

case 2:当Column A 的值与Column B 的值在多行中相同时(例如value 2 in A 列 - 应标记为 NULL

情况3:当A列和B列有唯一值时(例如值34[= A 列中的 33=] - 也应标记为 NULL

如有任何帮助,我们将不胜感激。

您可以使用 window 函数:

select t.*,
       (case when min(b) over (partition by a) <> max(b) over (partition by a)
             then 'DUPLICATE'
        end) as flag_output
from t;

你可以这样做:

UPDATE MISC.YOUR_TABLE SET FLAG_OUTPUT='DUPLICATE' WHERE COLUMN_A=
(SELECT COLUMN_A FROM (SELECT COLUMN_A, COUNT(*) A_COUNT FROM (SELECT DISTINCT COLUMN_A, COLUMN_B FROM MISC.YOUR_TABLE) Q GROUP BY COLUMN_A) R WHERE A_COUNT>1)

或者如果您没有更新实际的列,您可以这样做:

SELECT  YT.COLUMN_A, YT.COLUMN_B, DUPQ.FLAG_OUTPUT
FROM    MISC.YOUR_TABLE YT
        LEFT OUTER JOIN
        (SELECT COLUMN_A, 'DUPLICATE' FLAG_OUTPUT FROM (SELECT COLUMN_A, COUNT(*) A_COUNT FROM (SELECT DISTINCT COLUMN_A, COLUMN_B FROM MISC.YOUR_TABLE) Q GROUP BY COLUMN_A) R WHERE A_COUNT>1) DUPQ
        ON YT.COLUMN_A=DUPQ.COLUMN_A