テーブルからデータを抽出して変換し、それらのデータを別のテーブルに挿入するクエリを作成しようとしています。はい、これはデータウェアハウスクエリであり、MS Accessで実行しています。だから基本的に私はこのようなクエリが欲しい:
INSERT INTO Table2(LongIntColumn2, CurrencyColumn2) VALUES
(SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1);
試しましたが、構文エラーメッセージが表示されます。
あなたがこれをしたいなら、あなたは何をしますか?
"VALUES"、括弧なし:
INSERT INTO Table2(LongIntColumn2, CurrencyColumn2)
SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1;
構文オプションは2つあります。
オプション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
オプション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
オプション2では、プロジェクション上の列(SELECT上の列)のみを含むテーブルが作成されることに注意してください。
VALUESと括弧の両方を削除してください。
INSERT INTO Table2 (LongIntColumn2, CurrencyColumn2)
SELECT LongIntColumn1, Avg(CurrencyColumn) FROM Table1 GROUP BY LongIntColumn1
SQLからVALUES
を削除します。
この場合のあなたの問題は "values"キーワードです。 1行のデータのみを挿入する場合は、 "values"キーワードを使用します。選択の結果を挿入するために、あなたはそれを必要としません。
また、あなたは本当にselect文を括弧で囲む必要はありません。
msdn から:
複数レコード追加クエリ:
INSERT INTO target [(field1[, field2[, …]])] [IN externaldatabase]
SELECT [source.]field1[, field2[, …]
FROM tableexpression
単一レコード追加クエリ:
INSERT INTO target [(field1[, field2[, …]])]
VALUES (value1[, value2[, …])
行のグループを追加するときに "values"を削除し、余分な括弧を削除します。 avg(CurrencyColumn)にエイリアスを使用する(例で行ったように)ことによって、またはエイリアスをまったく使用しないことによって循環参照を避けることができます。
両方のテーブルで列名が同じ場合、クエリは次のようになります。
INSERT INTO Table2 (LongIntColumn, Junk)
SELECT LongIntColumn, avg(CurrencyColumn) as CurrencyColumn1
FROM Table1
GROUP BY LongIntColumn;
そしてそれは別名なしでも動作します。
INSERT INTO Table2 (LongIntColumn, Junk)
SELECT LongIntColumn, avg(CurrencyColumn)
FROM Table1
GROUP BY LongIntColumn;
1つのテーブルから別のデータベースの別のテーブルにデータを挿入する
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
2つのレコードセットを定義し、それらを2つのテーブル間の中間として使用するのが最善の方法だと思います。
この方法は、異なるデータベースからテーブルを更新する予定がある場合には特に興味深いものです(つまり、各レコードセットに独自の接続を設定できます)
既存の表に抽出を挿入しますか?
それが問題ではないなら、あなたは以下の質問を試みることができます:
SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 INTO T1 FROM Table1
GROUP BY LongIntColumn1);
それは新しいテーブルを作成するでしょう - >抽出された情報で> T1