Answers:
您有两个语法选项:
选项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”关键字。要插入选择的结果,则不需要它。
另外,您实际上不需要select语句周围的括号。
来自msdn:
多记录追加查询:
INSERT INTO target [(field1[, field2[, …]])] [IN externaldatabase]
SELECT [source.]field1[, field2[, …]
FROM tableexpression
单记录追加查询:
INSERT INTO target [(field1[, field2[, …]])]
VALUES (value1[, value2[, …])
追加一组行时,请删除“值”,并删除多余的括号。您可以通过为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;
将一个表中的数据插入到不同数据库中的另一个表中
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