我需要在一些复杂的条件下在数据中标记重复数据。假设我有一张这样的表:
col1 col2
1 a
1 a
1 a
2 #B
2 #B
1 a
3 #B
3 #B
2 #B
1 a
4 #A
4 #A
5 c
我需要将这些记录标记在:
col2中的值以'#'AND开头(它是col2中的重复值,并且在col1中的值不同)。
所以我需要得到这个:
col1 col2 newcol
1 a
1 a
1 a
2 #B 1
2 #B 1
1 a
3 #B 1
3 #B 1
2 #B 1
1 a
4 #A
4 #A
5 c
标记col2中带有“#B”的行的原因是因为它在col2中是重复的,而“#B”可以在col1中的“3”和“2”(所以2个或更多个不同的值)下找到。不标记“#A”记录的原因是因为虽然它们在col2中是重复的,但它们只在col1中的一个值(“4”)下。
我在dashDB中工作
答案 0 :(得分:1)
我认为DashDB支持窗口功能。如果是这样,你可以这样做:
select col1, col2,
(case when min_col1 <> max_col1 then 1 end) as flag
from (select t.*,
min(col1) over (partition by col2) as min_col1,
max(col1) over (partition by col2) as max_col1
from t
) t;
你也可以在没有窗口功能的情况下做类似的事情。
这是另一种方法:
select t.*, t2.flag
from t join
(select col2,
(case when min(col1) <> max(col1) then 1 end) as flag
from t
group by col2
) t2
on t.col2 = t2.col2;