SQL Query用于跨列查找重复数据

时间:2016-06-03 02:12:22

标签: sql find db2 duplicates row

我正在尝试查询DB2表以查找跨列的重复项。更具体地说,我正在查找存在重复列但不一定在同一列名称中的行。

实施例

Graph_Table 有四列坐标

ROW1

Column1 = -1
Column2 = -4
column3 = 6
column4 = 3

ROW7

Column1 = 3
Column2 = -1
Column3 = 6
Column4 = -4

查询会将此计为重复项或将结果集作为重复项返回,因为坐标相同但不是来自同一列。我已经研究了几个查询,但它们都使用序数行/值进行比较。

1 个答案:

答案 0 :(得分:3)

DB2支持laterallistagg()。因此,我认为你可以这样做:

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;