Am'm încercarea de a scrie o interogare care extrage și se transformă date dintr-un tabel și apoi introduceți aceste date într-un alt tabel. Da, aceasta este o depozitare de date de interogare și am'm fac în MS Access. Deci practic eu vreau unele interogare de genul asta:
INSERT INTO Table2(LongIntColumn2, CurrencyColumn2) VALUES
(SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1);
Am încercat, dar primi un mesaj de eroare de sintaxă.
Ce ai face dacă vrei să faci asta?
Aveți două sintaxa opțiuni:
Opțiunea 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
Varianta 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
Bear în vedere faptul că Opțiunea 2 va crea un tabel cu doar coloanele pe de proiecție (cele de pe SELECTAȚI).
Cred că problema în acest caz este "valori" cuvinte cheie. Utilizați "valori" cuvinte cheie atunci când îl introduceți doar un singur rând de date. Pentru introducerea rezultatelor o selectați, nu't nevoie de ea.
De asemenea, nu't nevoie de paranteze în jurul select.
De msdn:
Multiple-record append query:
INSERT INTO target [(field1[, field2[, …]])] [IN externaldatabase]
SELECT [source.]field1[, field2[, …]
FROM tableexpression
Single-record append query:
INSERT INTO target [(field1[, field2[, …]])]
VALUES (value1[, value2[, …])
Elimina "valori" atunci când're adăugarea unui grup de rânduri, și scoateți paranteze suplimentare. Puteți evita referință circulară folosind un alias pentru avg(CurrencyColumn) (ca în exemplu) sau de a nu utiliza un alias la toate.
Dacă numele de coloane sunt identice în ambele tabele, interogarea ar fi ca aceasta:
INSERT INTO Table2 (LongIntColumn, Junk)
SELECT LongIntColumn, avg(CurrencyColumn) as CurrencyColumn1
FROM Table1
GROUP BY LongIntColumn;
Și ar funcționa fără un alias:
INSERT INTO Table2 (LongIntColumn, Junk)
SELECT LongIntColumn, avg(CurrencyColumn)
FROM Table1
GROUP BY LongIntColumn;
introducerea de date formează o masă la alta masa în diferite baze de DATE
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
Ei bine, eu cred că cel mai bun mod ar fi (va fi?) pentru a defini 2 recordsets și să le utilizeze ca un intermediar între cele 2 tabele.
Această metodă este deosebit de interesant, dacă aveți de gând pentru a actualiza tabelele de baze de date diferite (de exemplu, fiecare recordset poate avea propria sa conexiune ...)
Vrei pentru a introduce extracție într-un tabel existent?
Dacă nu contează, atunci puteți încerca interogare de mai jos:
SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 INTO T1 FROM Table1
GROUP BY LongIntColumn1);
Se va crea un tabel nou -> T1 cu informațiile extrase