복붙노트

[SQL] 다른 테이블에서 추출한 테이블 레코드에 INSERT 작업을 수행하는 방법

SQL

다른 테이블에서 추출한 테이블 레코드에 INSERT 작업을 수행하는 방법

나는 쿼리를 작성하기 위해 노력하고있어 그 테이블에서 다음 다른 테이블에 그 데이터를 삽입 추출 및 변환 데이터입니다. 예,이 데이터웨어 하우징 쿼리 내가 MS 액세스에서 그것을하고 있어요. 그래서 기본적으로 나는이 같은 일부 쿼리를 원하는 :

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

나는 시도했지만 구문 오류 메시지가 표시됩니다.

이 작업을 수행하려는 경우 당신은 무엇을 할 것인가?

해결법

  1. ==============================

    1.없음 "VALUES 없다", 아니 괄호 :

    없음 "VALUES 없다", 아니 괄호 :

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

    2.두 구문 옵션이 있습니다 :

    두 구문 옵션이 있습니다 :

    옵션 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에 그)에서만 열이있는 테이블을 만들 것을 염두에 곰.

  3. ==============================

    3.값과 괄호를 모두 제거합니다.

    값과 괄호를 모두 제거합니다.

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

    4.당신의 SQL에서 값을 제거합니다.

    당신의 SQL에서 값을 제거합니다.

  5. ==============================

    5.나는이 경우에 문제가 "값"키워드 믿습니다. 당신은 데이터의 한 행을 삽입 할 때 당신은 "값"키워드를 사용합니다. 선별의 결과를 삽입하는 경우, 당신은 그것을 필요하지 않습니다.

    나는이 경우에 문제가 "값"키워드 믿습니다. 당신은 데이터의 한 행을 삽입 할 때 당신은 "값"키워드를 사용합니다. 선별의 결과를 삽입하는 경우, 당신은 그것을 필요하지 않습니다.

    또한, 당신은 정말 SELECT 문 주위에 괄호가 필요하지 않습니다.

    MSDN에서 :

    다중 레코드 추가 쿼리 :

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

    단일 레코드 추가 쿼리 :

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

    6.당신이 행의 그룹을 추가 할 때 "값"을 제거하고 여분의 괄호를 제거합니다. 당신은 (당신이 당신의 예에서와 마찬가지로) 평균 (CurrencyColumn)의 별칭을 사용하여 순환 참조를 피하거나 전혀 별칭을 사용하지 않음으로써 할 수 있습니다.

    당신이 행의 그룹을 추가 할 때 "값"을 제거하고 여분의 괄호를 제거합니다. 당신은 (당신이 당신의 예에서와 마찬가지로) 평균 (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;
    
  7. ==============================

    7.그럼 난 가장 좋은 방법은 (수 있습니까?) 것 2 개 레코드를 정의하고 두 테이블 사이의 중간으로 사용할 생각합니다.

    그럼 난 가장 좋은 방법은 (수 있습니까?) 것 2 개 레코드를 정의하고 두 테이블 사이의 중간으로 사용할 생각합니다.

    당신이 다른 데이터베이스에서 테이블을 업데이트하려는 경우이 방법은 특히 재미있다 (즉, 자신의 연결을 가질 수있는 각 레코드 ...)

  8. ==============================

    8.다른 데이터베이스의 다른 테이블을 하나 개의 테이블에서 데이터를 삽입

    다른 데이터베이스의 다른 테이블을 하나 개의 테이블에서 데이터를 삽입

    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
    
  9. ==============================

    9.기존 테이블에 추출을 삽입 하시겠습니까?

    기존 테이블에 추출을 삽입 하시겠습니까?

    그 다음 문제가되지 않는 경우는 쿼리 아래를 시도 할 수 있습니다 :

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

    그것은 새로운 테이블을 생성합니다 -> 추출 된 정보와 T1

  10. from https://stackoverflow.com/questions/74162/how-to-do-insert-into-a-table-records-extracted-from-another-table by cc-by-sa and MIT license