如何执行插入到表中的记录从另一个表中提取
时间:2020-03-05 18:56:27 来源:igfitidea点击:
我正在尝试编写一个查询,该查询从一个表中提取和转换数据,然后将这些数据插入另一个表中。是的,这是一个数据仓库查询,我正在MS Access中进行。所以基本上我想要这样的查询:
INSERT INTO Table2(LongIntColumn2, CurrencyColumn2) VALUES (SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1);
我尝试过,但是收到语法错误消息。
如果要执行此操作,该怎么办?
解决方案
回答
从SQL中删除" VALUES"。
回答
没有" VALUES",没有括号:
INSERT INTO Table2(LongIntColumn2, CurrencyColumn2) SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1;
回答
删除VALUES和括号。
INSERT INTO Table2 (LongIntColumn2, CurrencyColumn2) SELECT LongIntColumn1, Avg(CurrencyColumn) 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将创建一个表,该表的投影上仅包含列(SELECT上的列)。
回答
好吧,我认为最好的方法是(将是?)定义2个记录集并将它们用作2个表之间的中间对象。
- 打开两个记录集
- 从第一个表中提取数据(SELECT blablabla)
- 使用第一个记录集中的可用数据更新第二个记录集(通过添加新记录或者更新现有记录)
- 关闭两个记录集
如果我们计划更新来自不同数据库的表(即每个记录集可以具有自己的连接...),则此方法特别有趣。
回答
我相信我们在这种情况下遇到的问题是"值"关键字。仅插入一行数据时,可以使用" values"关键字。要插入选择的结果,则不需要它。
另外,我们实际上不需要select语句周围的括号。
来自msdn:
多记录追加查询:
INSERT INTO target [(field1[, field2[, …]])] [IN externaldatabase] SELECT [source.]field1[, field2[, …] FROM tableexpression
单记录追加查询:
INSERT INTO target [(field1[, field2[, …]])] VALUES (value1[, value2[, …])
回答
我们要在现有表中插入提取吗?
如果没关系,则可以尝试以下查询:
SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 INTO T1 FROM Table1 GROUP BY LongIntColumn1);
它将使用提取的信息创建一个新表-> T1
回答
当我们添加一组行时,请删除"值",并删除多余的括号。我们可以通过为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