So führen Sie INSERT in Tabellendatensätze durch, die aus einer anderen Tabelle extrahiert wurden

StackOverflow https://stackoverflow.com/questions/74162

  •  09-06-2019
  •  | 
  •  

Frage

Ich versuche, eine Abfrage zu schreiben, die Daten aus einer Tabelle extrahiert und umwandelt und diese Daten dann in eine andere Tabelle einfügt.Ja, das ist eine Data-Warehousing-Abfrage und ich mache sie in MS Access.Im Grunde möchte ich also eine Abfrage wie diese:

INSERT INTO Table2(LongIntColumn2, CurrencyColumn2) VALUES
  (SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1);

Ich habe es versucht, erhalte jedoch eine Syntaxfehlermeldung.

Was würden Sie tun, wenn Sie dies tun möchten?

War es hilfreich?

Lösung

Keine "Werte", keine Klammern:

INSERT INTO Table2(LongIntColumn2, CurrencyColumn2)
SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1;

Andere Tipps

Sie haben zwei Syntaxmöglichkeiten:

Option 1

CREATE TABLE Table1 (
    id int identity(1, 1) not null,
    LongIntColumn1 int,
    CurrencyColumn money
)

CREATE TABLE Table2 (
    id int identity(1, 1) not null,
    LongIntColumn2 int,
    CurrencyColumn2 money
)

INSERT INTO Table1 VALUES(12, 12.00)
INSERT INTO Table1 VALUES(11, 13.00)

INSERT INTO Table2
SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1

Option 2

CREATE TABLE Table1 (
    id int identity(1, 1) not null,
    LongIntColumn1 int,
    CurrencyColumn money
)

INSERT INTO Table1 VALUES(12, 12.00)
INSERT INTO Table1 VALUES(11, 13.00)


SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1
INTO Table2
FROM Table1
GROUP BY LongIntColumn1

Beachten Sie, dass Option 2 wird nur mit den Spalten auf dem Vorsprung (die auf der SELECT), um eine Tabelle erstellen.

Entfernen

Die beiden Werte und die Klammer.

INSERT INTO Table2 (LongIntColumn2, CurrencyColumn2)
SELECT LongIntColumn1, Avg(CurrencyColumn) FROM Table1 GROUP BY LongIntColumn1

Entfernen VALUES von Ihrem SQL.

Ich glaube, Ihr Problem in diesem Fall die „Werte“ Schlüsselwort ist. Sie verwenden die „Werte“ Schlüsselwort, wenn Sie nur eine Reihe von Daten einfügen. Für die Ergebnisse einer Auswahl Einfügen, Sie brauchen es nicht.

Auch Sie wirklich brauchen nicht die Klammern um die Select-Anweisung.

Msdn :

Multiple-Datensatz Anfügeabfrage:

INSERT INTO target [(field1[, field2[, …]])] [IN externaldatabase]
SELECT [source.]field1[, field2[, …]
FROM tableexpression

Single-Rekord Anfügeabfrage:

INSERT INTO target [(field1[, field2[, …]])]     
VALUES (value1[, value2[, …])

Entfernen Sie „Werte“, wenn Sie eine Gruppe von Zeilen anhängen, und entfernen Sie die zusätzlichen Klammern.Sie können den Zirkelverweis vermeiden, indem Sie einen Alias ​​für avg(CurrencyColumn) verwenden (wie Sie es in Ihrem Beispiel getan haben) oder indem Sie überhaupt keinen Alias ​​verwenden.

Wenn die Spaltennamen in beiden Tabellen gleich sind, würde Ihre Abfrage wie folgt aussehen:

INSERT INTO Table2 (LongIntColumn, Junk)
SELECT LongIntColumn, avg(CurrencyColumn) as CurrencyColumn1
FROM Table1
GROUP BY LongIntColumn;

Und es würde auch ohne Alias ​​funktionieren:

INSERT INTO Table2 (LongIntColumn, Junk)
SELECT LongIntColumn, avg(CurrencyColumn)
FROM Table1
GROUP BY LongIntColumn;

Nun, ich denke der beste Weg wäre, (wird?) 2-Cord-Sets zu definieren und sie als Vermittler zwischen den zwei Tabellen.

  1. Öffnen Sie beide Cord-Sets
  2. Extrahieren der Daten aus der ersten Tabelle (SELECT blablabla)
  3. Update 2. Re-Cord mit Daten in der ersten Datensatzgruppe (entweder durch Hinzufügen neue Datensätze oder die Aktualisierung bestehenden Datensätze
  4. Schließen Sie beide Cord-Sets

Dieses Verfahren ist besonders interessant, wenn Sie aktualisieren Tabellen aus verschiedenen Datenbanken planen (dh jede Datensatzgruppe kann eine eigene Verbindung haben ...)

Daten aus einer Tabelle in verschiedener Datenbank in einer anderen Tabelle einfügen

insert into DocTypeGroup 
    Select DocGrp_Id,DocGrp_SubId,DocGrp_GroupName,DocGrp_PM,DocGrp_DocType 
    from Opendatasource( 'SQLOLEDB','Data Source=10.132.20.19;UserID=sa;Password=gchaturthi').dbIPFMCI.dbo.DocTypeGroup

Wollen Sie Extraktion in einer vorhandenen Tabelle einfügen?

Wenn es nicht dann keine Rolle können Sie die folgende Abfrage versuchen:

SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 INTO T1 FROM Table1 
GROUP BY LongIntColumn1);

Es wird eine neue Tabelle erstellen -> T1 mit den extrahierten Informationen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top