Tablodan veri ayıklayan ve dönüştüren bir sorgu yazmaya çalışıyorum ve sonra bu verileri başka bir tabloya ekliyorum. Evet, bu bir veri depolama sorgusu ve MS Access'te yapıyorum. Yani temelde böyle bir sorgu istiyorum:
INSERT INTO Table2(LongIntColumn2, CurrencyColumn2) VALUES
(SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1);
Denedim ama bir sözdizimi hata mesajı alıyorum.
Bunu yapmak istersen ne yapardın?
"DEĞER" yok, parantez yok:
INSERT INTO Table2(LongIntColumn2, CurrencyColumn2)
SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1;
İki sözdizimi seçeneğiniz var:
Seçenek 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
Seçenek 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
Seçenek 2'nin yalnızca projeksiyondaki sütunların bulunduğu bir tablo oluşturacağını unutmayın (SELECT'teki olanlar).
Hem DEĞERLERİ hem de parantezi çıkarın.
INSERT INTO Table2 (LongIntColumn2, CurrencyColumn2)
SELECT LongIntColumn1, Avg(CurrencyColumn) FROM Table1 GROUP BY LongIntColumn1
SQL'den VALUES
öğesini kaldırın.
Bu örnekteki sorunun "değerler" anahtar kelimesi olduğuna inanıyorum. Yalnızca bir satırlık veri eklerken "value" anahtar sözcüğünü kullanırsınız. Bir seçimin sonuçlarını eklemek için buna ihtiyacınız yok.
Ayrıca, select ifadesinin etrafındaki parantezlere gerçekten ihtiyacınız yoktur.
msdn içinden:
Çoklu kayıt ekleme sorgusu:
INSERT INTO target [(field1[, field2[, …]])] [IN externaldatabase]
SELECT [source.]field1[, field2[, …]
FROM tableexpression
Tek kayıt ekleme sorgusu:
INSERT INTO target [(field1[, field2[, …]])]
VALUES (value1[, value2[, …])
Bir grup satır eklerken "değerleri" kaldırın ve fazladan parantezleri kaldırın. Dairesel referansı, avg için bir takma ad kullanarak (CurrencyColumn) (örneğinizde yaptığınız gibi) veya hiçbir takma ad kullanmamaktan kaçınabilirsiniz.
Sütun adları her iki tabloda da aynıysa, sorgunuz şöyle olacaktır:
INSERT INTO Table2 (LongIntColumn, Junk)
SELECT LongIntColumn, avg(CurrencyColumn) as CurrencyColumn1
FROM Table1
GROUP BY LongIntColumn;
Ve bir takma ad olmadan çalışırdı:
INSERT INTO Table2 (LongIntColumn, Junk)
SELECT LongIntColumn, avg(CurrencyColumn)
FROM Table1
GROUP BY LongIntColumn;
farklı DATABASE içindeki bir tablodan diğerine veri ekleme
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
Bence en iyi yöntem 2 kayıt kümesini tanımlamanın ve bunları 2 tablo arasında bir ara madde olarak kullanmanın (olacak?) Olacağını düşünüyorum.
Tabloları farklı veritabanlarından güncellemeyi planlıyorsanız bu yöntem özellikle ilginçtir (yani her kayıt kümesinin kendi bağlantısı olabilir ...)
Mevcut bir tabloya çıkarma eklemek ister misiniz?
Önemli değilse, aşağıdaki sorguyu deneyebilirsiniz:
SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 INTO T1 FROM Table1
GROUP BY LongIntColumn1);
Yeni bir tablo yaratacaktır -> T1 çıkarılan bilgilerle birlikte