首页 文章

如何INSERT到从另一个表中提取的表记录

提问于
浏览
171

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

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

我试过但得到语法错误消息 .

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

9 回答

  • 2

    没有“ Value ”,没有括号:

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

    您有两种语法选项:

    Option 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
    

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

  • 23

    删除VALUES和括号 .

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

    从SQL中删除 VALUES .

  • 10

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

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

    来自msdn

    多记录追加查询:

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

    单记录追加查询:

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

    在追加一组行时删除“值”,并删除多余的括号 . 您可以通过使用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;
    
  • 4

    那么我认为最好的方法是(将会?)定义2个记录集并将它们用作2个表之间的中间值 .

    • 打开两个记录集

    • 从第一个表中提取数据(SELECT blablabla)

    • 使用第一个记录集中可用的数据更新第二个记录集(通过添加新记录或更新现有记录)

    • 关闭两个记录集

    如果您计划更新来自不同数据库的表(即每个记录集可以拥有自己的连接......),此方法特别有用 .

  • 25

    将数据从一个表插入到不同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
    
  • 272

    是否要在现有表中插入提取?

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

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

    它将创建一个新表 - > T1,其中包含提取的信息

相关问题