2016-06-03 4 views
1

Ich versuche eine DB2-Tabelle abzufragen, um doppelte Spalten zu finden. Um genauer zu sein, suche ich nach Zeilen, in denen doppelte Spalten vorhanden sind, aber nicht notwendigerweise über denselben Spaltennamen.SQL Query zum Suchen doppelter Daten in Spalten

Beispiel.

Graph_Table hat vier Spalten von Koordinaten

Row1

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

Row7

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

Die Abfrage als Duplikat zählen würde dies oder das Ergebnis zurück gesetzt, wie Duplikate weil die Koordinaten sind gleich, aber nicht aus derselben Spalte. Ich habe mehrere Abfragen recherchiert, aber alle arbeiten mit den Ordinalzeilen/Werten für den Vergleich.

Antwort

3

DB2 unterstützt lateral und listagg(). Daher denke ich, dass Sie tun können:

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; 
+1

Ich bin wirklich erstaunt über Ihre Beherrschung aller SQL-Sprachen. –

+0

Haben Sie wirklich Zeit verbracht und alle SQL-Sprachen gelernt, oder Sie haben in Ihrem Gehirn wie * Neo in Matrix feeded ... * :) – Rahul

+0

@FelixPamitan. . . Sie sind nicht anders. Ironischerweise sollte die obige Abfrage beispielsweise in Postgres funktionieren. –