SQLServerのPIVOT句
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)で使用できます。
チュートリアルの手順に従うには、この記事の最後にあるテーブルの作成とDMLのDDLセクションを参照してデータを作成し、独自のデータベースで実行してみてください。
PIVOT句の例
以下に示すようなデータを含むテーブルがあります。
so_nhan_en_production id_phong 12009 Nguyen Huong 54000 45 34974 Pham Hoa 80000 45 34987 Phan Lan 42000 45 45001 Tran Hua 57500 30 75623 Vu Hong 65000 30以下のSQLコマンドを実行して、 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;
返される結果は次のようになります。
TongLuongTheoPhong 30 45 TongLuong 122500 176000上記の例では、データが転送された後にテーブルを作成し、部屋の合計給与のIDが30、部屋のIDが45であることを示しています。結果は2列の行になり、各列は1部屋になります。
クロスクエリの新しいテーブルの列を指定します
最初に、転送テーブルに含める情報のフィールドを決定する必要があります。この例では、TongLuongが最初の列で、次に2つの列id_phong30とid_phong45です。
SELECT 'TongLuong' AS TongLuongTheoPhong,
[30], [
45]
ソーステーブルのデータを特定します
次は、新しいテーブルのソースデータを返すSELECTステートメントです。
この例では、id_phongであり、テーブルからのものです。
(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);
-
SQLServerのWHERE句
SQL Server(T-SQL)では、WHERE句を使用して、SELECT、INSERT、UPDATE、またはDELETEステートメントからの結果をフィルタリングします。 WHERE句の構文 WHERE điều kiện; 変数名または変数値 条件 -レコードが選択されるために満たす必要のある条件。 たとえば、条件 SELECT * FROM nhanvien WHERE ten = Jane; 上記のWHERE句では、テーブルから結果を除外します。 SELECTステートメントは、Janeという名前のテーブルから行を返します。 SELECTステートメントで*を使用してい
-
SQLServerのFROM句
SQL Server FROM句(T-SQL)は、SQLServerクエリで必要なテーブルを一覧表示するために使用されます。 FROM句句 FROM bang1 [ { INNER JOIN | LEFT OUTER JOIN | RIGHT OUTER JOIN | FULL OUTER JOIN } bang2 ON bang1.cot1 = bang2.cot1 ] 変数名と変数値 bang1 およびbang2 -SQLステートメントで使用されるテーブル。 state1.cot1=bang2.cot1の原則に従った2つのリンクされたテーブル。 注 FROM句に少な