2016-08-03 59 views
-1

Ich muss eine effiziente Abfrage finden, um die Anzahl der Feldänderungen pro History-Tabelleneintrag zu zählen.TSQL Query History Tabelle Feld ändern Anzahl

Jedes Mal, wenn sich ein Datenwert in der Kundentabelle ändert, wird eine Kopie des Datensatzes in die Verlaufstabelle eingegeben.

Ich möchte eine Möglichkeit, die Anzahl der Änderungen pro Eintrag in der Verlaufstabelle zu zählen. Jedes Feld vergleicht den aktuellen Eintrag mit dem vorherigen Eintrag, um einen Unterschied zu bestimmen.

Gibt es einen guten Weg, dies zu tun? Ohne einen Sproc?

enter image description here

+0

Screenshot hilft, aber einige Beispieldaten würden mehr Aufmerksamkeit auf sich ziehen. –

Antwort

0

Sie können etwas wie das folgende starten. Ich habe keine SQL Server-Umgebung in diesem Moment, kann nicht überprüfen, ob alles korrekt ist.

WITH cte AS (
     SELECT *, rn = ROW_NUMBER() OVER (PARTITION BY CustomerID ORDER BY ID) 
     FROM CustomerHistory 
    ) 
    SELECT 
     c1.*, 
     FieldChangeCount = 
      (CASE WHEN c1.ServiceLevel <> c2.ServiceLevel THEN 1 ELSE 0 END) 
      + 
      (CASE WHEN c1.Status <> c2.Status THEN 1 ELSE 0 END)  
    FROM cte c1 
    LEFT JOIN cte c2 
      ON c1.CustomerID = c2. CustomerID 
      AND c2.rn = c1.rn - 1 
    ORDER BY c1.LogID 
+0

Das hat fast perfekt funktioniert, danke. Ich musste die ORDER BY GROUP BY nach PARTITION BY ORDER BY ändern, aber ... das hat wirklich geholfen. DANKE. – Wendi

+0

@Wendi, aktualisierte ich die Antwort mit der richtigen Syntax, froh, dass Hilfe. – EricZ