如何对从另一个表中提取的表记录执行 INSERT 操作

我尝试编写一个查询,从一个表中提取和转换数据,然后将这些数据插入到另一个表中。是的,这是一个数据仓库查询,我正在微软访问它。所以基本上我想要一些像这样的查询:

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

我试过了,但得到一个语法错误消息。

如果你想这么做,你会怎么做?

700304 次浏览

从 SQL 中删除 VALUES

没有“价值观”,没有括号:

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

删除两个值和括号。

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

您有两个语法选项:

选择一

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

选择二

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 上的列)的表。

我认为最好的办法是(将来?)定义两个记录集并将它们用作两个表之间的中间件。

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

如果您计划更新来自不同数据库的表(即每个记录集可以有自己的连接...) ,那么这种方法尤其有趣

我相信你在这个例子中的问题是“ value”关键字。当只插入一行数据时,可以使用“ value”关键字。对于插入选择的结果,您不需要它。

另外,您实际上不需要 select 语句周围的括号。

来自 我不知道:

多记录追加查询:

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;

在不同的 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