Aktualisierung der Spalte mit Wert aus anderen Tabelle, kann keine eindeutige Funktion
Meine ursprünglichen Daten in Tabelle2. Ich Tabelle1 erstellt von Grund auf neu. Ich besiedelten Spalte A so:
INSERT INTO Table1("item")
SELECT DISTINCT(Table2."item")
FROM Table2
Ich aufgefüllt "Tabelle1".Die Summen (Spalte B) wie diese:
UPDATE Table1
SET totals = t2.q
FROM Table1 INNER JOIN
(
SELECT t2."item"
, SUM(t2.quantity) AS q
FROM t2
GROUP BY t2."item"
) AS t2
ON Table1."item" = t2."item"
Wie kann ich Auffüllen "Tabelle1"."Datum"? Mein UPDATE oben funktioniert hier nicht, weil ich nicht verwenden können Sie eine Aggregatfunktion auf ein Datum. Ich war in der Lage, die Ergebnisse wollte ich mit dem folgenden code in einer separaten Abfrage:
SELECT DISTINCT Table1."item"
, Table2."date"
FROM Table1 INNER JOIN Table2
ON Table1."item" = Table2."item"
ORDER BY Table1."item"
Aber wie verwende ich die Ergebnisse dieser Abfrage, um den Wert von der Spalte? Ich bin mit SQL Server 2008.
- Welches Datum Sie wählen sollten, wenn es mehr als eine?, warum können Sie nicht verwenden, eine Aggregat-Funktion auf eine Spalte Datum?
- Sie müssen erklären, welche Datum, das Sie möchten. Es gibt keine() oder WILLKÜRLICH() Funktion in T-SQL. Was passiert, wenn Orange hat zwei verschiedene Termine?
- Auch, bitte nicht setzen Sie doppelte Anführungszeichen um Spaltennamen. Das macht es so schwer zu Lesen und stützt sich auch auf
QUOTED_IDENTIFIER
Einstellungen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht tun können, die stecken alle immer wieder, wie @Lamak vorgeschlagen, dann könnte man die Durchführung einer
UPDATE
diese Weise:Für SQL Server Sie coul haben, verwenden Sie ein einzelnes
INSERT
Aussage:Der einfachste Weg ist die Verwendung eines einfachen CTAS ("create table as select):
SELECT INTO
Sie die Dinge verlieren, die möglicherweise bereits erstellt wurden, auf die Ziel-Tabelle (Indizes, Einschränkungen, Trigger, Berechtigungen, bestimmte Abhängigkeiten, etc...).Stattdessen eine Tabelle erstellen, können Sie eine Ansicht mit einer select-Anweisung wie in @Lamak Antwort. So würden Sie nicht haben, aktualisieren Sie die neue Zeile gesetzt, jedes mal, wenn die
Table2
updates.