我正在尝试编写一个查询,从表中提取和转换数据,然后将这些数据插入另一个表中。是的,这是一个数据仓库查询,我在MS Access中这样做。所以基本上我想要一些像这样的查询:
INSERT INTO Table2(LongIntColumn2, CurrencyColumn2) VALUES
(SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1);
我尝试过但收到语法错误消息。
如果你想这样做,你会怎么做?
答案 0 :(得分:272)
没有“VALUES”,没有括号:
INSERT INTO Table2(LongIntColumn2, CurrencyColumn2)
SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1;
答案 1 :(得分:25)
您有两种语法选项:
选项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上的列)的表。
答案 2 :(得分:23)
删除VALUES和括号。
INSERT INTO Table2 (LongIntColumn2, CurrencyColumn2)
SELECT LongIntColumn1, Avg(CurrencyColumn) FROM Table1 GROUP BY LongIntColumn1
答案 3 :(得分:10)
从SQL中删除VALUES
。
答案 4 :(得分:9)
我相信你在这个例子中的问题是“values”关键字。只插入一行数据时使用“values”关键字。要插入选择的结果,您不需要它。
另外,你真的不需要围绕select语句的括号。
来自msdn:
多记录附加查询:
INSERT INTO target [(field1[, field2[, …]])] [IN externaldatabase]
SELECT [source.]field1[, field2[, …]
FROM tableexpression
单记录追加查询:
INSERT INTO target [(field1[, field2[, …]])]
VALUES (value1[, value2[, …])
答案 5 :(得分:4)
在追加一组行时删除“值”,并删除多余的括号。您可以通过使用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;
答案 6 :(得分:2)
我认为最好的方法是(将会?)定义2个记录集并将它们用作2个表之间的中间值。
如果您计划更新来自不同数据库的表(即每个记录集可以拥有自己的连接......),此方法特别有用。
答案 7 :(得分:2)
将数据从一个表插入另一个表中的不同DATABASE
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
答案 8 :(得分:1)
是否要在现有表中插入提取?
如果没关系,那么您可以尝试以下查询:
SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 INTO T1 FROM Table1
GROUP BY LongIntColumn1);
它将创建一个新表 - > T1与提取的信息