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列有唯一值时(例如值3和4[= 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
我试图在 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列有唯一值时(例如值3和4[= 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