테이블에서 데이터를 추출하고 변환 한 다음 다른 테이블에 데이터를 삽입하는 쿼리를 작성하려고합니다. 예, 이것은 데이터웨어 하우징 쿼리이며 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는 프로젝션의 열 (SELECT에있는 열) 만있는 테이블을 만듭니다.
VALUES와 괄호를 모두 제거하십시오.
INSERT INTO Table2 (LongIntColumn2, CurrencyColumn2)
SELECT LongIntColumn1, Avg(CurrencyColumn) FROM Table1 GROUP BY LongIntColumn1
SQL에서 VALUES
을 제거하십시오.
이 인스턴스의 문제는 "값"키워드라고 생각합니다. 하나의 데이터 행을 삽입 할 때 "값"키워드를 사용합니다. 선택 결과를 삽입하려면 필요하지 않습니다.
또한 select 문에서 괄호를 사용할 필요가 없습니다.
msdn :
다중 레코드 추가 쿼리 :
INSERT INTO target [(field1[, field2[, …]])] [IN externaldatabase]
SELECT [source.]field1[, field2[, …]
FROM tableexpression
단일 레코드 추가 쿼리 :
INSERT INTO target [(field1[, field2[, …]])]
VALUES (value1[, value2[, …])
행 그룹을 추가 할 때 "값"을 제거하고 여분의 괄호를 제거하십시오. 예를 들어 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
글쎄, 가장 좋은 방법은 될 것이라고 생각 (?) 2 레코드 집합을 정의하고 2 테이블 사이의 중간으로 그들을 사용합니다.
이 방법은 다른 데이터베이스의 테이블을 업데이트하려는 경우 특히 유용합니다 (즉, 각 레코드 세트가 자체 연결을 가질 수 있습니다 ...)
기존 테이블에 추출을 삽입 하시겠습니까?
중요하지 않은 경우 다음 쿼리를 사용해보십시오.
SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 INTO T1 FROM Table1
GROUP BY LongIntColumn1);
추출 된 정보를 사용하여 새 테이블 -> T1을 작성합니다.