2016-12-02 3 views
0

Ich muss den Wert in Faktentabelle aus einer anderen Zeile und Spalte in derselben Tabelle basierend auf Bedingungen und Referenz aus einer anderen Dimensionstabelle aktualisieren.MSSQL: Aktualisiere Wert aus einer anderen Zeile und einer anderen Spalte aus der gleichen Tabelle basierend auf den Bedingungen

enter image description here
enthält Beispiel von Verkaufszeilen (zwei Elemente, zwei Tage, zwei Standorte).

enter image description here
enthält nur eine Zeile in diesem Beispiel.

Was ich versuche zu finden, ist eine SQL-Abfrage, die Menge an Qty_ref aktualisiert, wo Site und Datum übereinstimmen - und wenn es eine Übereinstimmung von der Referenztabelle gibt. Ich hoffe, meine Bilder helfen dabei, dies zu erklären.

Ich bin mit Azure SQL-Datenbank mit SQL Server 2016.

Meine Faktentabelle enthält Millionen von Zeilen und dim_ref Tabelle kann bis zu einigen tausend Reihen wachsen.

+0

Es könnte uns helfen zu verstehen, wenn Sie Ihre Frage bearbeiten, um die SQL enthalten, die Sie bereits geschrieben, dies zu tun, die nicht ganz so funktioniert, wie erwartet . – mendosi

Antwort

0

Ein einfaches Update mit einem inneren Verknüpfung sollte es tun:

UPDATE f1 
SET qty_ref = f2.qty 
FROM fact_sales f1 
INNER JOIN dim_item_ref d ON(f1.item = d.item) 
INNER JOIN fact_sales f2 ON(d.item_ref = f2.item) 
WHERE f1.site = f2.site 
AND f1.date = f2.date 
+0

Danke! Ich hatte zu viel Angst, als ich mich einem riesigen Faktentisch anschloß. Ich dachte, die beste Lösung würde Fensterfunktionen usw. verwenden, aber es scheint, dass die innere Verbindung großer Tabellen gar nicht so ressourcenintensiv ist. –

+0

Froh zu helfen :-) Wenn Sie den richtigen Index haben, ist ein paar Millionen Zeilen nichts ... –

Verwandte Themen