我正在尝试查询DB2表以查找跨列的重复项。更具体地说,我正在查找存在重复列但不一定在同一列名称中的行。
实施例
Graph_Table 有四列坐标
ROW1
Column1 = -1
Column2 = -4
column3 = 6
column4 = 3
ROW7
Column1 = 3
Column2 = -1
Column3 = 6
Column4 = -4
查询会将此计为重复项或将结果集作为重复项返回,因为坐标相同但不是来自同一列。我已经研究了几个查询,但它们都使用序数行/值进行比较。
答案 0 :(得分:3)
DB2支持lateral
和listagg()
。因此,我认为你可以这样做:
select gt.*
from (select gt.*, count(*) over (partition by v.cols) as cnt
from graph_table gt, lateral
(select listagg(col, ',') within group (order by col) as cols
from (values (gt.column1), (gt.column2), (gt.column3), (gt.column4)
) v(col)
) v
) gt
where cnt >= 2;