2017-09-13 3 views
-4

Ich versuche, die Ergebnisse von zwei SELECT-Anweisungen Zeile für Zeile zu vergleichen. So zum Beispiel sieht die Tabelle wie folgt aus:MSSQL Zwei Tabellen Zeile für Zeile vergleichen

GUID | NUMBER (auto inc) | VERSION (timestamp) | Name 
A | 4     | 1     | Robert 
B | 9     | 2     | John 
C | 14    | 3     | Magret 

Nun werden die wählt aussehen

select guid from table order by number; 
select guid from table order by version; 

Nun werden die Tabellen sollten zeilen verglichen werden, wenn die GUIDs das gleiche in beiden wählt sind die gleiche Linie. Wenn ja, true zurück, sonst falsch.

bearbeiten: Ziel ist es, eine Änderung der Spalten GUID und NAME zu erkennen. Die Spalte NUMBER ist ein automatischer Inkrementwert, der nur erhöht wird, wenn der Eintrag erstellt wird. Die VERSION ist ein Zeitstempel, der sich jedes Mal ändert, wenn der Eintrag aktualisiert wurde. Nun ist es das Ziel, die beiden Abfragen von oben zu vergleichen, um eine Änderung der Tabelle zu bestimmen, denn wenn die Reihenfolge der Einträge unterschiedlich ist, ist eine Änderung eingetreten.

Danke, shirocko

+1

Noch einmal, was Sie erreichen wollen - und was Problem versuchen Sie zu lösen? – jarlh

+0

Ich habe die Beschreibung oben geändert. Ich hoffe, es hilft. – shirocko

Antwort

0

Wenn Sie wissen wollen, ob alle Zeilen die gleiche mit den beiden Spalten geordnet sind, dann:

select (case when count(*) = sum(case when rnk_1 = rnk2 then 1 else 0 end) 
      then 'All Same' 
      else 'Different' 
     end) 
from (select t.*, 
      rank() over (order by number) as rnk_1, 
      rank() over (order by version) as rnk_2 
     from t 
    ) t; 
+0

Danke, das hilft sehr. – shirocko

Verwandte Themen