SQL Server
 Computer >> コンピューター >  >> プログラミング >> SQL Server

SQLServerのPIVOT句

SQL Server(Transact-SQL)では、PIVOT句を使用すると、クロス集計を使用して、あるテーブルから別のテーブルにデータを転送できます。つまり、集計結果を取得して行から列に移動できます。

SQLServerの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 'TongLuo ng' 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です。

  SEL ECT 'TongLuong' AS TongLuongTheoPhong, 
[30], [ 45]

ソーステーブルのデータを特定します

次は、新しいテーブルのソースデータを返すSELECTステートメントです。

この例では、id_phongであり、テーブルからのものです。

  (SELECT id_phong, lu ong 
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 TA BLE phong 
( id_phong INT NOT NULL,
ten_phong VARCHAR(50) NOT NULL,
CONSTRAINT pk_phong PRIMARY KEY (id_phong)
) ;
  CREATE T ABLE 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ステートメントです。

  INSERT INTO phong 
(id_phong, ten_phong)
VALUES
(30, 'Ketoan ');
  INSERT INTO  phong 
(id_phong, ten_phong)
VALUES
(45, 'Banhang');
  INSERT INTO nhanvien 
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(12009, 'Nguye n', 'Huong', 54000, 45);
  INSERT INTO  nhanvien 
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(34974, 'Pham', 'Flowers', 80000, 45);
  INSERT INTO anvien 
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(34987, 'Phan', 'La n', 42000, 45);
  INSERT  INTO 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);

  1. 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ステートメントで*を使用してい

  2. 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句に少な