SQL Server में PIVOT क्लॉज
SQL Server (Transact-SQL) में, PIVOT क्लॉज क्रॉस टेबुलेशन की अनुमति देता है जिससे डेटा को एक टेबल से दूसरी टेबल में स्थानांतरित किया जा सकता है, यानी कुल परिणाम प्राप्त करके पंक्तियों से कॉलम में ले जाया जाता है।

उदाहरण डेटा टेबल में योग की गणना करता है और फिर पंक्तियों को कॉलम में पास करता है
PIVOT क्लॉज सिंटैक्स
SELECT cot_dautien AS bidanh_cot_dautien,
[giatri_chuyen1], [giatri_chuyen2], … [giatri_chuyen_n]
FROM
(bang_nguon) AS bidanh_bang_nguon
PIVOT
(
ham_tong (cot_tong)
FOR
cot_chuyen IN ([giatri_chuyen1], [giatri_chuyen2], … [giatri_chuyen_n])
) AS bidanh_bang_chuyen;
चर नाम या मान
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_nhanvien | ho | ten | luong | 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 |
PIVOT क्लॉज के साथ क्रॉस-क्वेरी बनाने के लिए नीचे दिए गए SQL कमांड को चलाएं।
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 |
उपरोक्त उदाहरण स्थानांतरण के बाद डेटा वाली एक टेबल बनाता है, जो आईडी 30 वाले कमरे और आईडी 45 वाले कमरे के कुल वेतन को दर्शाता है। परिणाम एक पंक्ति पर 2 कॉलम के साथ है, प्रत्येक कॉलम 1 कमरा है।
क्रॉस-क्वेरी की नई टेबल में कॉलम निर्दिष्ट करें
पहले यह निर्धारित करने की आवश्यकता है कि स्थानांतरण टेबल में कौन से सूचना क्षेत्र शामिल करने हैं। इस उदाहरण में, TongLuong पहला कॉलम है, फिर 2 कॉलम id_phong 30 और id_phong 45।
SELECT 'TongLuong' AS TongLuongTheoPhong,
[30], [45]
स्रोत टेबल में डेटा निर्धारित करें
अगला वह SELECT स्टेटमेंट है जो नई टेबल के लिए स्रोत डेटा वापस करेगा।
इस उदाहरण में, यह id_phong और luong है nhanvien टेबल से।
(SELECT id_phong, luong
FROM nhanvien) AS BangNguon
स्रोत क्वेरी के लिए उपनाम निर्दिष्ट करने की आवश्यकता है, इस उदाहरण में यह BangNguon है।
कुल गणना फ़ंक्शन निर्धारित करें
क्रॉस क्वेरी में उपयोग किए जा सकने वाले फ़ंक्शंस में SUM, COUNT, MIN, MAX और AVG शामिल हैं। इस उदाहरण में, योग फ़ंक्शन SUM है।
PIVOT
(SUM(luong)
स्थानांतरित किए जाने वाले मान निर्धारित करें
अंत में, परिणाम शामिल करने के लिए स्थानांतरित किए जाने वाले मान की आवश्यकता होती है। यह क्रॉस क्वेरी में कॉलम हेडर होगा।
इस उदाहरण में, हमें केवल id_phong 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 स्टेटमेंट्स हैं।
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, 'Nguyen', 'Huong', 54000, 45);
INSERT INTO nhanvien
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(34974, 'Pham', 'Hoa', 80000, 45);
INSERT INTO nhanvien
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(34987, 'Phan', 'Lan', 42000, 45);
INSERT INTO nhanvien
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(45001, 'Tran', 'Hue', 57500, 30);
INSERT INTO nhanvien
(so_nhanvien, ho, ten, luong, id_phong)
VALUES
(75623, 'Vu', 'Hong', 65000, 30);