SQL Server (Transact-SQL) में, 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 सर्वर के बाद के संस्करणों में किया जा सकता है:SQL Server 2014, SQL Server 2012, SQL Server 2008 R2, SQL Server 2008 और SQL Server 2005।
पी>ट्यूटोरियल में दिए गए चरणों का पालन करने के लिए, इस आलेख के अंत में डेटा बनाने के लिए टेबल और DML बनाने के लिए DDL अनुभाग देखें और फिर अपने डेटाबेस पर चलने का प्रयास करें।
पी>पिवट क्लॉज के साथ उदाहरण
हमारे पास नीचे दिखाए गए डेटा के साथ तालिका है।
so_nhan_en_production id_phong 12009 गुयेन हुआंग 54000 45 34974 फाम होआ 80000 45 34987 फान लैन 42000 45 45001 ट्रान हुआ 57500 30 75623 वू होंग 65000 30इसके साथ एक क्रॉस-क्वेरी बनाने के लिए नीचे 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;
लौटा हुआ परिणाम निम्न जैसा दिखेगा।
टोंगलुओंगथियोफोंग 30 45 TongLuong 122500 176000उपरोक्त उदाहरण डेटा स्थानांतरित होने के बाद एक तालिका बनाता है, यह दर्शाता है कि कमरे के कुल वेतन की आईडी 30 है और कमरे की आईडी 45 है। परिणाम 2 स्तंभों वाली एक पंक्ति पर है, प्रत्येक स्तंभ 1 कमरा है।
क्रॉस-क्वेरी की नई तालिका में कॉलम निर्दिष्ट करें
पहले यह निर्धारित करने की आवश्यकता है कि सूचना के कौन से क्षेत्र स्थानांतरण तालिका में शामिल करना चाहते हैं। इस उदाहरण में, TongLuong पहला कॉलम है, फिर 2 कॉलम id_fong 30 और id_fong 45.
SELECT 'TongLuong' AS TongLuongTheoPhong,
[30], [
45]
स्रोत तालिका में डेटा निर्धारित करें
अगला चयन कथन है जो नई तालिका के लिए स्रोत डेटा लौटाएगा।
इस उदाहरण में, यह id_fong और तालिका से है।
(SELECT id_phong, luong
FROM nhanvien) AS Ba
ngNguon
स्रोत क्वेरी के लिए उपनाम निर्दिष्ट करने की आवश्यकता है, इस उदाहरण में BangNguon है।
कुल गणना फ़ंक्शन निर्धारित करें
जिन कार्यों का उपयोग क्रॉस क्वेरी में किया जा सकता है, उनमें SUM, COUNT, MIN, MAX और AVG शामिल हैं। इस उदाहरण में, योग फ़ंक्शन SUM.
PIVOT
(SUM(luong)
स्थानांतरित किया जाने वाला मान निर्धारित करें
अंत में, परिणाम को शामिल करने के लिए मान को स्थानांतरित करने की आवश्यकता होती है। यह क्रॉस क्वेरी में कॉलम हेडर होगा।
इस उदाहरण में, हमें केवल id_folder 30 और 45 वापस करने की आवश्यकता है। ये मान नई तालिका में कॉलम नाम होंगे। याद रखें कि ये मान id_fong के सीमित मानों की सूची हैं और ज़रूरी नहीं कि इनमें सभी मान हों.
FOR id_phong IN ([30], [45])
उदाहरण के लिए डीडीएल / डीएमएल
यदि आपके पास एक डेटाबेस है और आप ऊपर दिए गए PIVOT निर्देश मैनुअल के उदाहरणों को आज़माना चाहते हैं, तो आपको DDL / DML की आवश्यकता होगी।
DDL - डेटा परिभाषा भाषा PIVOT क्लॉज उदाहरण में उपयोग के लिए तालिका निर्माण आदेश (तालिका बनाएं) हैं।
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);