SQL Server(Transact-SQL)에서 PIVOT 절을 사용하면 교차 도표에서 한 테이블에서 다른 테이블로 데이터를 전송할 수 있습니다. 즉, 집계 결과를 얻고 행에서 열로 이동할 수 있습니다.
이 예에서는 합계를 계산한 다음 데이터 테이블의 열에 행을 전달합니다.
PIVOT 절 구문
SELECT cot_dautien AS ,
[giatri_chuyen1], [giatri_chuyen2], … [giatri_chuyen_n]
FROM
() AS
PIVOT
(
ham_tong ()
FOR
IN ([giatri_chuyen1], [giatri_chuyen2], … [giatri_chuyen_n])
) AS n>;
) AS n>;
변수 이름 또는 변수 값
cot_dautien
전환 후 열 또는 표현식이 새 테이블의 첫 번째 열이 됩니다.
bidanh_cot_dautien
전송 후 새 테이블의 첫 번째 열 이름입니다.
giatri_chuyen1, giatri_chuyen2, . giatri_chuyen_n
전송할 값 목록.
bang_nguon
SELECT 문은 소스 데이터(초기 데이터)를 새 테이블로 가져옵니다.
bidanh_bang_nguon
bang_nguon의 별칭
ham_tong
SUM, COUNT, MIN, MAX 또는 AVG와 같은 합계 함수
cot_tong
열 또는 표현식이 ham_tong과 함께 사용됩니다.
cot_chuyen
열에는 전송할 값이 포함됩니다.
bidanh_bang_chuyen
전송 후 테이블의 별칭입니다.
PIVOT 절은 이후 버전의 SQL Server(SQL Server 2014, SQL Server 2012, SQL Server 2008 R2, SQL Server 2008 및 SQL Server 2005)에서 사용할 수 있습니다.피>
튜토리얼의 단계를 따르려면 이 문서의 끝에 있는 테이블 생성을 위한 DDL 섹션과 데이터 생성을 위한 DML을 참조한 다음 자신의 데이터베이스에서 실행해 보십시오.피>
PIVOT 절의 예
아래와 같은 데이터가 있는 테이블이 있습니다.
so_nhan_en_production 아이디퐁 12009 Nguyen Huong 54000 45 34974 Pham Hoa 80000 45 34987 Phan Lan 42000 45 45001 Tran Hua 57500 30 75623 Vu Hong 650000-30 PIVOT 절.SELECT 'TongLuong' AS TongLuongTheoPhong,
[30], [45]
FROM
(SELECT id_phong, luong
FROM nhanvien) AS BangNguon
PIVOT
(
SUM(luong)
FOR id_phong IN ([30], [45])
) AS BangChuyen;
반환된 결과는 다음과 같습니다.
통룽테오퐁 30 45 TongLuong 122500 176000위의 예는 데이터가 전송된 후 테이블을 생성하여 방의 총 급여가 ID 30이고 방 ID가 45임을 나타냅니다. 결과는 2개의 열이 있는 행에 있으며 각 열은 1개의 방입니다.
교차 쿼리의 새 테이블에서 열 지정
먼저 전송 테이블에 포함할 정보 필드를 결정해야 합니다. 이 예에서 TongLuong은 첫 번째 열이고 다음 2개의 열 id_pong 30 및 id_pong 45입니다.
SELECT 'TongLuong' AS TongLuongTheoPhong,
[30], [
45]
소스 테이블의 데이터 결정
다음은 새 테이블의 소스 데이터를 반환할 SELECT 문입니다.
이 예에서는 테이블에서 id_pong입니다.
(SELECT id_phong, luong
FROM nhanvien) AS Ba
ngNguon
소스 쿼리의 별칭을 지정해야 합니다. 이 예에서는 BangNguon입니다.
전체 계산 함수 결정
교차 쿼리에 사용할 수 있는 함수에는 SUM, COUNT, MIN, MAX 및 AVG가 있습니다. 이 예에서 합계 함수 SUM.
PIVOT
(SUM(luong)
전송할 값 결정
마지막으로 결과를 포함하려면 값을 전송해야 합니다. 이것은 교차 쿼리의 열 헤더가 됩니다.
이 예에서는 id_folder 30과 45만 반환하면 됩니다. 이 값은 새 테이블의 열 이름이 됩니다. 이 값은 id_phong의 제한된 값 목록이며 모든 값을 포함할 필요는 없습니다.
FOR id_phong IN ([30], [45])
DDL / DML 예시
데이터베이스가 있고 위의 PIVOT 사용 설명서에 있는 예제를 시도하려면 DDL/DML이 필요합니다.
DDL - 데이터 정의 언어 PIVOT 절 예제에서 사용하기 위한 테이블 생성 명령(CREATE TABLE)입니다.
CREATE TABLE phong
( id_phong INT NOT NULL,
ten_phong VARCHAR(50) NOT NULL,
CONSTRAINT pk_phong PRIMARY KEY (id_phong)
) ;
CREATE TABLE nhanvien
( so_nhanvien INT NOT NULL,
ho VARCHAR(50) NOT NULL,
ten VARCHAR(50) NOT NULL,
luong INT,
id_phong INT,
CONSTRAINT pk_nhanvien PRIMARY KEY (so_nhanvien)
) ;
DML - 데이터 조작 언어 테이블에 필요한 데이터를 생성하기 위한 INSERT 문입니다.
INSERTINTO phong
(id_phong, ten_phong)
VALUES
(30, 'Ketoan
');
INSERT INTOphong
(id_phong, ten_phong)
VALUES
(45, 'Banhang');
INSERT INTOnhanvien
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(12009, 'Nguye
n', 'Huong', 54000, 45);
INSERT INTOnhanvien
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(34974, 'Pham',
'Flowers', 80000, 45);
INSERT INTOanvien
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(34987, 'Phan', 'La
n', 42000, 45);
INSERTINTO nhanvien
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
45001, 'Tr
an', 'Hue', 57500, 30);
INSERT INTO home
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(75623, 'Vu', 'Hong'
, 65000, 30);