SQL सर्वर में पिवट ऑपरेटर आउटपुट सेट में प्रत्येक पंक्ति को समेकित परिणाम सेट में संबंधित कॉलम में परिवर्तित करता है। पिवट ऑपरेटर क्रॉस-सारणीबद्ध प्रश्नों को लिखने में विशेष रूप से उपयोगी है।
आइए देखें कि यह व्यवहार में कैसे काम करता है।
डेटा तैयार करना
सबसे पहले, कुछ डमी डेटा बनाते हैं जिसका उपयोग हम पिवट ऑपरेटर को लागू करने के लिए कर सकते हैं।
CREATE DATABASE schooldb
CREATE TABLE student
(
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
gender VARCHAR(50) NOT NULL,
DOB datetime NOT NULL,
total_score INT NOT NULL,
city VARCHAR(50) NOT NULL
)
INSERT INTO student
VALUES (1, 'Jolly', 'Female', '12-JUN-1989', 500, 'London'),
(2, 'Jon', 'Male', '02-FEB-1974', 545, 'Manchester'),
(3, 'Sara', 'Female', '07-MAR-1988', 600, 'Leeds'),
(4, 'Laura', 'Female', '22-DEC-1981', 400, 'Liverpool'),
(5, 'Alan', 'Male', '29-JUL-1993', 500, 'London'),
(6, 'Kate', 'Female', '03-JAN-1985', 500, 'Liverpool'),
(7, 'Joseph', 'Male', '09-APR-1982', 643, 'London'),
(8, 'Mice', 'Male', '16-AUG-1974', 543, 'Liverpool'),
(9, 'Wise', 'Male', '11-NOV-1987', 499, 'Manchester'),
(10, 'Elis', 'Female', '28-OCT-1990', 400, 'Leeds');
पिवट ऑपरेटर कैसे काम करता है?
SQL डेटा को समूहबद्ध करने का मानक तरीका समूह द्वारा खंड का उपयोग करना है। आइए एक क्वेरी बनाएं जो शहर के आधार पर समूहित छात्र तालिका के कुल_स्कोर कॉलम में मानों के औसत की गणना करे।
USE schooldb
SELECT
city,
AVG(total_score) as Avg_Score
FROM
student
GROUP BY
city
यह निम्नलिखित परिणाम देता है:
[टेबल आईडी=25 /]
क्या होगा यदि हम एक परिणाम सेट चाहते हैं जहां शहर के नाम कॉलम में प्रदर्शित होते हैं जहां प्रत्येक कॉलम में उस शहर से संबंधित छात्रों के कुल_स्कोर का औसत मूल्य होता है? कुछ इस तरह:
[टेबल आईडी=26 /]
यह वह जगह है जहाँ पिवट ऑपरेटर काम आता है।
आधार डेटा चुनना
पिवट ऑपरेटर का उपयोग करते समय पहला कदम उस आधार डेटा का चयन करना है जिस पर पिवट ऑपरेटर आधारित होगा। हम अपने डेटा को शहर के अनुसार समूहित करना चाहते हैं और उस शहर से संबंधित कुल छात्रों का औसत निकालना चाहते हैं। इसलिए, हमें एक साधारण सेलेक्ट स्टेटमेंट लिखने की जरूरत है जो शहर और टोटल_स्कोर का चयन करता है।
SELECT
city,
total_score
FROM
student
अस्थायी डेटासेट बनाना
अब, आदर्श रूप से, हम पिछले अनुभाग में बनाए गए आधार डेटा पर सीधे पिवट ऑपरेटर को लागू करने में सक्षम होंगे, लेकिन दुर्भाग्य से, हम ऐसा नहीं कर सकते। पिवट ऑपरेटर को काम करने के लिए, हमें एक टेबल-वैल्यू एक्सप्रेशन बनाना होगा, जिस पर हम पिवट ऑपरेटर को लागू कर सकते हैं। हमारे यहां कई तरह के विकल्प हैं; हम व्युत्पन्न तालिकाओं, सामान्य तालिका अभिव्यक्तियों (CTE) का उपयोग कर सकते हैं या हम अस्थायी तालिकाएँ भी बना सकते हैं।
इस उदाहरण के लिए, हम एक त्वरित, सरल व्युत्पन्न तालिका का उपयोग करेंगे। ऐसा करने के लिए हमने पिछले खंड में बनाए गए मूल चयन कथन के साथ, हम इसे कोष्ठक के एक सेट में लपेटते हैं और फिर इसमें एक उपनाम लागू करते हैं। अंत में, हम उस व्युत्पन्न तालिका से सब कुछ चुनते हैं।
SELECT * FROM
(SELECT
city,
total_score
FROM
student
)
AS StudentTable
पिवट ऑपरेटर लागू करना
अब जब हमने अपना आधार डेटा तैयार कर लिया है और एक व्युत्पन्न तालिका बना ली है, तो हम उस पर पिवट ऑपरेटर लागू करेंगे।
ऐसा करने के लिए, व्युत्पन्न तालिका के अंत में "PIVOT" डालें, उसके बाद कोष्ठक का एक सेट, और इस पिवट तालिका को एक उपनाम दें।
कोष्ठक के अंदर, हमें कुछ महत्वपूर्ण जानकारी निर्दिष्ट करनी होगी।
- हमें उस क्षेत्र को निर्दिष्ट करने की आवश्यकता है जिसमें हम एक समग्र कार्य लागू करना चाहते हैं। हमारे मामले में, हम "total_score" कॉलम में AVG एग्रीगेट फ़ंक्शन लागू करना चाहते हैं।
- फिर हमें यह कहना होगा कि हम अपने डेटा को आधार डेटा से किन कॉलमों पर पिवट कर रहे हैं। हम ऐसा "FOR" लिखकर करते हैं जिसके बाद कॉलम का नाम आता है जो हमारे उदाहरण में एक शहर है।
- अंतिम चरण थोड़ा परेशान करने वाला है। हमें शहर के कॉलम से उन मानों को सूचीबद्ध करना होगा जिन्हें हम अपनी पिवट टेबल में शीर्षक बनाना चाहते हैं। हम IN ऑपरेटर का उपयोग करते हैं जिसके बाद कोष्ठक का एक सेट होता है। कोष्ठक के अंदर, हम अल्पविराम से अलग की गई सूची का उपयोग करते हैं जहां हम वर्गाकार कोष्ठक के अंदर प्रत्येक स्तंभ का नाम लिखते हैं। हमारे उदाहरण में, हम लंदन, लीड्स और मैनचेस्टर को पिवट टेबल के शीर्षक नामों के रूप में चाहते हैं और इसलिए हम उन्हें इस प्रारूप में लिखते हैं:([लंदन], [लीड्स], [मैनचेस्टर])।
USE schooldb
SELECT * FROM
(SELECT
city,
total_score
FROM
student
)
AS StudentTable
PIVOT(
AVG(total_score)
FOR city IN ([London],[Liverpool],[Leeds],[Manchester])
) AS StudentPivotTable
यदि आप उपरोक्त क्वेरी को निष्पादित करते हैं, तो परिणाम इस तरह दिखाई देंगे:
[टेबल आईडी=27 /]
पिवट टेबल में पंक्ति समूह जोड़ना
पिछले अनुभागों में, हमने देखा कि पिवट ऑपरेटर का उपयोग करके पंक्ति समूहों को स्तंभ समूहों में कैसे परिवर्तित किया जाता है। हालांकि, आप पिवट तालिका में स्तंभ समूहों के साथ पंक्ति समूह भी जोड़ सकते हैं।
उदाहरण के लिए, यदि आप शहर के साथ-साथ लिंग के आधार पर समूहित सभी छात्रों के कुल_स्कोर कॉलम का औसत मान ज्ञात करना चाहते हैं, तो आप पिवट टेबल के अंदर कॉलम समूह और पंक्ति समूह का संयोजन में उपयोग कर सकते हैं। यहां प्रत्येक स्तंभ एक शहर के नाम का प्रतिनिधित्व करेगा और प्रत्येक पंक्ति एक छात्र के लिंग का प्रतिनिधित्व करेगी।
सौभाग्य से, आपको पिवट तालिका में पंक्ति समूहों को जोड़ने के लिए कोई अतिरिक्त स्क्रिप्ट लिखने की आवश्यकता नहीं है। बेस डेटासेट के अंदर, बस उस कॉलम का नाम जोड़ें जिसे आप पिवट टेबल में एक पंक्ति समूह के रूप में जोड़ना चाहते हैं।
USE schooldb
SELECT * FROM
(SELECT
city,
gender,
total_score
FROM
student
)
AS StudentTable
PIVOT(
AVG(total_score)
FOR city IN ([London],[Liverpool],[Leeds],[Manchester])
) AS StudentPivotTable
उपरोक्त लिपि में, हमने बस आधार चयन विवरण में "लिंग" कॉलम जोड़ा है।
उपरोक्त क्वेरी का आउटपुट इस तरह दिखता है:
[टेबल आईडी=28 /]
यह क्रॉस-सारणी है। उदाहरण के लिए, परिणामों से देखा जा सकता है कि लंदन में रहने वाली महिला छात्रों का औसत कुल स्कोर 500 है। इसी तरह, लंदन में रहने वाले पुरुष छात्रों का औसत कुल स्कोर 571 है।
यह भी पढ़ें:
QUOTENAME फ़ंक्शन के साथ डायनामिक पिवट टेबल बनाना