如何将INSERT插入到从其他表中提取的表中

我试图写一个查询提取和转换表中的数据,然后将这些数据插入到另一个表。 是的,这是一个数据仓库查询,我正在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; 

你有两个语法选项:

选项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将创build一个只有投影上的列(在SELECT上的列)的表。

删除VALUES和括号。

 INSERT INTO Table2 (LongIntColumn2, CurrencyColumn2) SELECT LongIntColumn1, Avg(CurrencyColumn) FROM Table1 GROUP BY LongIntColumn1 

从SQL中删除VALUES

我相信你在这个例子中的问题是“值”关键字。 只插入一行数据时使用“values”关键字。 为了插入select的结果,你不需要它。

另外,你真的不需要围绕select语句的圆括号。

从msdn :

多logging追加查询:

 INSERT INTO target [(field1[, field2[, …]])] [IN externaldatabase] SELECT [source.]field1[, field2[, …] FROM tableexpression 

单logging追加查询:

 INSERT INTO target [(field1[, field2[, …]])] VALUES (value1[, value2[, …]) 

那么我认为最好的方法是(将?)来定义2个logging集,并将它们用作2个表之间的中介。

  1. 打开两个logging集
  2. 从第一个表中提取数据(SELECT blablabla)
  3. 使用第一个logging集中的可用数据更新第二个logging集(通过添加新logging或更新现有logging
  4. closures两个logging集

如果您计划更新不同数据库中的表(即每个logging集都可以有自己的连接…),则此方法特别有用。

删除“值”,当你附加一组行,并删除多余的括号。 您可以通过使用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 

你想在现有的表中插入提取?

如果没关系,那么你可以尝试下面的查询:

 SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 INTO T1 FROM Table1 GROUP BY LongIntColumn1); 

它将创build一个新的表 – > T1与提取的信息