다른 테이블에서 추출한 테이블 레코드에 INSERT를 수행하는 방법
저는 테이블에서 데이터를 추출하고 변환하는 쿼리를 작성한 다음 해당 데이터를 다른 테이블에 삽입하려고 합니다.네, 데이터 웨어하우징 쿼리이고 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에 있는 열)만으로 테이블을 생성합니다.
값과 괄호를 모두 제거합니다.
INSERT INTO Table2 (LongIntColumn2, CurrencyColumn2)
SELECT LongIntColumn1, Avg(CurrencyColumn) FROM Table1 GROUP BY LongIntColumn1
이 경우 당신의 문제는 "values" 키워드라고 생각합니다.데이터 행을 하나만 삽입할 때는 "values" 키워드를 사용합니다.선택 결과를 삽입할 때는 필요 없습니다.
또한 select 문 주변에 괄호가 정말 필요 없습니다.
보낸 사람:
다중 레코드 추가 쿼리:
INSERT INTO target [(field1[, field2[, …]])] [IN externaldatabase]
SELECT [source.]field1[, field2[, …]
FROM tableexpression
단일 레코드 추가 쿼리:
INSERT INTO target [(field1[, field2[, …]])]
VALUES (value1[, value2[, …])
제거한다.VALUES
당신의 SQL로부터.
행 그룹을 추가할 때 "값"을 제거하고 추가 괄호를 제거합니다.예제에서와 같이 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;
음, 가장 좋은 방법은 2개의 레코드 집합을 정의하고 2개의 테이블 사이의 중간으로 사용하는 것입니다.
- 두 레코드 세트 모두 열기
- 첫번째 테이블에서 데이터 추출(SELECT blabla)
- 첫 번째 레코드 집합에서 사용 가능한 데이터로 두 번째 레코드 집합 업데이트(새 레코드 추가 또는 기존 레코드 업데이트)
- 두 레코드 세트 모두 닫습니다.
이 방법은 서로 다른 데이터베이스에서 테이블을 업데이트할 계획인 경우 특히 흥미롭습니다(즉, 각 레코드 집합은 고유한 연결을 가질 수 있습니다...).
한 테이블의 데이터를 다른 데이터베이스의 다른 테이블에 삽입
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
기존 테이블에 추출을 삽입하시겠습니까?
문제가 되지 않는 경우 아래 쿼리를 시도해 볼 수 있습니다.
SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 INTO T1 FROM Table1
GROUP BY LongIntColumn1);
추출된 정보로 새로운 테이블을 생성합니다 -> T1
언급URL : https://stackoverflow.com/questions/74162/how-to-do-insert-into-a-table-records-extracted-from-another-table
'source' 카테고리의 다른 글
스프링 부트 3에서 플라이웨이 마이그레이션을 찾을 수 없음 (0) | 2023.09.12 |
---|---|
자바스크립트를 사용하여 HTML5 데이터리스트를 새로 고치려면 어떻게 해야 합니까? (0) | 2023.09.07 |
Make footer stick to bottom of page correctly (0) | 2023.09.07 |
스위프트 - 소수점이 0인 경우 플로트에서 소수점을 제거하는 방법은 무엇입니까? (0) | 2023.09.07 |
백업만 복사 옵션의 의미는 무엇입니까? (0) | 2023.09.07 |