कोर्स
SQL Server और Oracle में PIVOT ऑपरेटर एक बेहद उपयोगी तकनीक है जो टेबल की पंक्तियों को स्तंभों में बदल देती है। PIVOT ऑपरेटर न केवल क्वेरी परिणामों की पठनीयता और व्याख्या में सुधार करता है, बल्कि समाकलनों का उपयोग करके पिवट टेबल या क्रॉस-टैब बनाने के माध्यम से डेटा रुझानों को समझना भी आसान बनाता है। ये पिवट टेबल खासकर उन रिपोर्टों में सहायक होती हैं जिन्हें अच्छी विज़ुअलाइज़ेशन की आवश्यकता होती है।
शुरू करने से पहले, यदि आपको लगता है कि आपकी SQL कौशल थोड़ी जंग खा गई हैं, तो मैं DataCamp के SQL Fundamentals स्किल ट्रैक की जाँच करने की सलाह देता/देती हूँ। हमारा SQL Fundamentals स्किल ट्रैक आपको डेटा को जॉइन और मैनिपुलेट करना, साथ ही सबक्वेरी और विंडो फ़ंक्शन का उपयोग करना सिखाएगा।
त्वरित उत्तर: SQL में Pivot कैसे करें
SQL Server का PIVOT ऑपरेटर डेटा को सारांशित करने में उपयोगी है क्योंकि यह पंक्तियों को स्तंभों में बदलने की अनुमति देता है। नीचे दिए गए city_sales टेबल पर विचार करें, जो पाँच प्रमुख अमेरिकी शहरों में किसी उत्पाद की सामान्य बिक्री दिखाता है।

SQL PIVOT का उपयोग करके बदले जाने वाले टेबल का उदाहरण। चित्र: लेखक।
हम निम्नलिखित क्वेरी का उपयोग करेंगे, जो PIVOT ऑपरेटर का उपयोग करती है, ताकि ऊपर दिए गए टेबल में एकाधिक स्तंभों को पिवट किया जा सके।
-- Select the columns for the output: city and sales data for 2019, 2020, and 2021
SELECT
city,
[2019] AS Sales_2019,
[2020] AS Sales_2020,
[2021] AS Sales_2021
FROM
(
-- Subquery to select city, year, and sales from city_sales table
SELECT city, year, sales
FROM city_sales
) AS src
PIVOT
(
-- Pivot the sales data to have years as columns and sum the sales for each year
SUM(sales)
FOR year IN ([2019], [2020], [2021])
) AS pvt;

SQL PIVOT का उपयोग करके आउटपुट ट्रांसफॉर्मेशन का उदाहरण। चित्र: लेखक।
SQL में PIVOT क्या है
पिवटिंग SQL में एक तकनीक है जिसका उपयोग सारणीबद्ध डेटा में पंक्तियों को स्तंभों में बदलने के लिए किया जाता है। SQL Server और Oracle में, पिवटिंग PIVOT ऑपरेटर के साथ की जाती है। नीचे दिखाया गया SQL PIVOT ऑपरेटर का सिंटैक्स तीन मुख्य भागों में बँटा होता है:
-
SELECT:
SELECTस्टेटमेंट SQL पिवट टेबल में लौटाए जाने वाले स्तंभों को संदर्भित करता है। -
सबक्वेरी: सबक्वेरी में वह डेटा स्रोत या टेबल होती है जिसे SQL पिवट टेबल में शामिल करना है।
-
PIVOT:
PIVOTऑपरेटर में वे समाकलन और फ़िल्टर होते हैं जिन्हें पिवट टेबल में लागू किया जाना है।
-- Select the non-pivoted column and the pivoted columns with aliases
SELECT
[non-pivoted column],
[first pivoted column] AS [column name],
[second pivoted column] AS [column name],
...
FROM
(
-- Subquery to select the necessary columns from the source table
SELECT [columns]
FROM [source_table]
) AS source_table
PIVOT
(
-- Pivot operation to aggregate data and transform rows into columns
[aggregate_function]([pivot_column])
FOR [pivot_column] IN ([first pivoted column], [second pivoted column], ...)
) AS pivot_table; -- Alias for the result of the pivot operation
SQL PIVOT के डेटाबेस-विशिष्ट इम्प्लीमेंटेशन
SQL Server और Oracle डेटाबेस सीधे PIVOT ऑपरेटर का समर्थन करते हैं। हालाँकि, MySQL और PostgreSQL में SQL में पिवट टेबल बनाने के लिए वैकल्पिक तरीके हैं।
SQL Server में PIVOT
SQL Server PIVOT ऑपरेटर के लिए नेटिव सपोर्ट प्रदान करता है। यहाँ, हम PIVOT ऑपरेटर का उपयोग पंक्तियों को स्तंभों में बदलने और SUM() जैसे एग्रीगेट फ़ंक्शंस से डेटा का सारांश बनाने के लिए करेंगे। हम अधिक परिष्कृत डेटा मैनिपुलेशन के लिए WHERE, GROUP BY और ORDER BY जैसी SQL क्लॉज़ का भी उपयोग करेंगे।
नीचे दिया गया उदाहरण दिखाता है कि PIVOT ऑपरेटर का उपयोग 2020 या बाद के वर्ष के लिए डेटा फ़िल्टर करने (WHERE), शहर और वर्ष के आधार पर डेटा समूहित करने (GROUP BY) और शहर के अनुसार डेटा सॉर्ट करने (ORDER BY) में कैसे किया जाता है:
-- Select the city and sales data for the years 2019, 2020, and 2021
SELECT
city,
[2019] AS Sales_2019,
[2020] AS Sales_2020,
[2021] AS Sales_2021
FROM
(
-- Subquery to select city, year, and sales from the city_sales table
SELECT city, year, sales
FROM city_sales
WHERE year >= 2020 -- filtering
GROUP BY city, year, sales -- grouping
) AS src
PIVOT
(
-- Pivot the sales data to have years as columns, averaging the sales over each year
SUM(sales) -- aggregating
FOR year IN ([2019], [2020], [2021])
) AS pvt;

सामान्य क्लॉज़ के साथ SQL PIVOT का उपयोग करते हुए बदले गए टेबल के आउटपुट का उदाहरण। चित्र: लेखक।
Oracle में PIVOT
SQL Server के समान, Oracle भी पंक्तियों को स्तंभों में बदलने के लिए PIVOT ऑपरेटर का उपयोग करता है। हालाँकि, Oracle डेटाबेस में PIVOT ऑपरेटर का सिंटैक्स SQL Server से थोड़ा भिन्न है। नीचे दी गई क्वेरी दिखाती है कि Oracle में PIVOT ऑपरेटर कैसा दिखाई देता है। ध्यान दें कि Oracle में स्तंभों को PIVOT ऑपरेटर के भीतर ही उपनाम (alias) दिए जाते हैं, जबकि SQL Server में यह बाहरी SELECT स्टेटमेंट में होता है।
-- Outer SELECT to choose all columns resulting from the PIVOT operation
SELECT *
FROM (
-- Inner SELECT to retrieve the raw data of city, year, and sales
SELECT city, year, sales
FROM sales
)
-- PIVOT operation to convert rows to columns
PIVOT (
SUM(sales)
-- Specify the year values to pivot and alias them as Sales_<year>
FOR year IN (2019 AS Sales_2019, 2020 AS Sales_2020, 2021 AS Sales_2021)
)
ORDER BY city;
MySQL में Pivoting
MySQL डेटाबेस SQL PIVOT ऑपरेटर का समर्थन नहीं करता। MySQL में SQL पिवट टेबल बनाने के लिए, आपको सशर्त समाकलन के साथ CASE स्टेटमेंट का उपयोग करना होगा। उदाहरण के लिए, नीचे दी गई क्वेरी विभिन्न वर्षों के लिए बिक्री के योग द्वारा डेटा को समेकित करने के लिए एक पिवट टेबल बनाएगी, जिसे city के अनुसार समूहित और क्रमबद्ध किया गया है।
-- Select the city and sum the sales data for the years 2019, 2020, and 2021
SELECT
city,
SUM(CASE WHEN year = 2019 THEN sales ELSE 0 END) AS Sales_2019,
SUM(CASE WHEN year = 2020 THEN sales ELSE 0 END) AS Sales_2020,
SUM(CASE WHEN year = 2021 THEN sales ELSE 0 END) AS Sales_2021
FROM
city_sales
GROUP BY
city
ORDER BY
city;
PostgreSQL में Pivoting
PostgreSQL डेटाबेस भी SQL PIVOT ऑपरेटर का समर्थन नहीं करता। इसलिए, पिवट टेबल बनाते समय सशर्त समाकलन के साथ CASE स्टेटमेंट का उपयोग करना महत्वपूर्ण है। नीचे दी गई क्वेरी PostgreSQL में पिवट टेबल बनाने के लिए प्रयुक्त सशर्त CASE स्टेटमेंट का एक उदाहरण है।
-- Select the city and sum the sales data for the years 2019, 2020, and 2021
SELECT
city,
SUM(CASE WHEN year = 2019 THEN sales ELSE 0 END) AS Sales_2019,
SUM(CASE WHEN year = 2020 THEN sales ELSE 0 END) AS Sales_2020,
SUM(CASE WHEN year = 2021 THEN sales ELSE 0 END) AS Sales_2021
FROM
city_sales
GROUP BY
city
ORDER BY
city;
SQL PIVOT के साथ उन्नत तकनीकें
जटिल क्वेरी लिखने के लिए कुछ उन्नत SQL पिवटिंग तकनीकें होती हैं। इस खंड में, हम डायनेमिक पिवटिंग पर नज़र डालेंगे, जिसका उपयोग हम उन पिवट टेबल क्वेरियों को बनाने के लिए करते हैं जहाँ पिवट किए जाने वाले स्तंभ अज्ञात होते हैं। यह विधि रनटाइम पर पिवट टेबल उत्पन्न करने के लिए SQL का उपयोग करती है।
SQL Server में Dynamic PIVOT
नीचे दी गई क्वेरी SQL Server में year स्तंभ को डायनेमिक रूप से पिवट करने के लिए PIVOT का उपयोग करती है। क्वेरी city_sales टेबल से विशिष्ट वर्षों को प्राप्त करेगी। इसके बाद वह प्राप्त वर्षों का उपयोग करते हुए एक डायनेमिक PIVOT क्वेरी कॉन्स्ट्रक्ट और निष्पादित करेगी।
-- Declare variables to hold the column names and the dynamic query
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
-- Get distinct values of the year column and concatenate them into a string
SELECT @cols = STRING_AGG(QUOTENAME(year), ',')
FROM (SELECT DISTINCT year FROM city_sales) AS years;
-- Construct the dynamic PIVOT query
SET @query = '
SELECT city, ' + @cols + '
FROM
(
-- Subquery to select city, year, and sales from the city_sales table
SELECT city, year, sales
FROM city_sales
) AS src
PIVOT
(
-- Pivot the sales data to have years as columns, summing the sales for each year
SUM(sales)
FOR year IN (' + @cols + ')
) AS pvt
ORDER BY city'; -- Order the results by city
-- Execute the dynamic PIVOT query
EXEC sp_executesql @query;

SQL डायनेमिक PIVOT का उपयोग करते हुए टेबल आउटपुट का उदाहरण। चित्र: लेखक।
Oracle में Dynamic PIVOT
Oracle डेटाबेस में, डायनेमिक पिवटिंग को EXECUTE IMMEDIATE स्टेटमेंट का उपयोग करके डायनेमिक क्वेरी निष्पादित कर समर्थित किया जाता है। LISTAGG फ़ंक्शन का उपयोग भी स्तंभ नामों और पिवट के भीतर उपनामों में प्रयुक्त एकल उद्धरण ' ' को डायनेमिक रूप से एकत्रित करने के लिए किया जाता है।
DECLARE
cols VARCHAR2(4000);
sql_query VARCHAR2(4000);
BEGIN
-- Get the list of years dynamically
SELECT LISTAGG('''' || year || ''' AS ' || 'sales_' || year, ',')
INTO cols
FROM (SELECT DISTINCT year FROM city_sales);
-- Construct the dynamic SQL query
sql_query := 'SELECT * FROM (
SELECT city, year, sales
FROM city_sales
)
PIVOT (
SUM(sales)
FOR year IN (' || cols || ')
)
ORDER BY city';
-- Execute the dynamic SQL query
EXECUTE IMMEDIATE sql_query;
END;
MySQL में Dynamic Pivoting
MySQL प्रत्यक्ष डायनेमिक SQL का समर्थन नहीं करता। इसलिए, MySQL में डायनेमिक PIVOT के लिए आपको एक स्टोर्ड प्रोसीजर बनाना होगा। नीचे दी गई क्वेरी यह दिखाती है कि डायनेमिक PIVOT क्वेरी बनाने के लिए स्टोर्ड प्रोसीजर का उपयोग कैसे करें।
-- Declare variables to hold the dynamic columns (cols) and the final SQL query
DELIMITER $
CREATE PROCEDURE dynamic_pivot()
BEGIN
DECLARE cols VARCHAR(1000);
DECLARE sql_query VARCHAR(2000);
-- Get the list of distinct years
SELECT GROUP_CONCAT(DISTINCT
CONCAT('SUM(CASE WHEN year = ', year, ' THEN sales ELSE 0 END) AS ', year, '')
) INTO cols
FROM city_sales;
-- Construct the dynamic SQL query
SET sql_query = CONCAT('SELECT city, ', cols, ' FROM city_sales GROUP BY city ORDER BY city');
-- Prepare and execute the SQL query
PREPARE stmt FROM sql_query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $
DELIMITER ;
स्टोर्ड प्रोसीजर बनाने के बाद, आपको डायनेमिक PIVOT क्वेरी निष्पादित करने के लिए उस स्टोर्ड प्रोसीजर को कॉल करना होगा:
CALL dynamic_pivot();
PostgreSQL में Dynamic Pivoting
इसी तरह, आप PostgreSQL में निम्नलिखित क्वेरी का उपयोग करके डायनेमिक PIVOT बना सकते हैं:
-- Block declaration to execute PL/pgSQL code in an anonymous code block
DO
$
DECLARE
cols text; -- Variable to store the list of columns for the dynamic query
query text; -- Variable to store the dynamic SQL query
BEGIN
-- Get distinct years and construct the list of SUM(CASE...) statements
SELECT STRING_AGG(DISTINCT 'SUM(CASE WHEN year = ' || year || ' THEN sales ELSE 0 END) AS "Sales_' || year || '"', ', ')
INTO cols
FROM city_sales;
-- Construct the dynamic PIVOT query
query := 'SELECT city, ' || cols || ' FROM city_sales GROUP BY city ORDER BY city';
-- Execute the dynamic PIVOT query
EXECUTE query;
END
$;
निष्कर्ष और आगे की सीख
SQL में PIVOT का उपयोग करना समझना महत्वपूर्ण है यदि आप डेटा को कुशलतापूर्वक रूपांतरित और विश्लेषित करना चाहते हैं। SQL में पिवट टेबल बनाते समय, विभिन्न डेटाबेस में PIVOT ऑपरेटर के भिन्न-भिन्न इम्प्लीमेंटेशन सीखना बेहद ज़रूरी है। एक डेटा विश्लेषक के रूप में, मैं आपको अपनी SQL कौशल का अभ्यास जारी रखने के लिए प्रोत्साहित करता/करती हूँ ताकि आप अलग-अलग डेटासेट का विश्लेषण करने के लिए PIVOT को कैसे और कब लागू करना है, यह सीख सकें।
यदि आप उद्योग में पैर जमाने के इच्छुक एक नए डेटा विश्लेषक हैं या एक अनुभवी विश्लेषक, तो मैं DataCamp के Introduction to SQL और Intermediate SQL कोर्स लेने की सिफारिश करता/करती हूँ ताकि आप अपनी डेटा विश्लेषण कौशल को बेहतर बना सकें। मैं हमारे Data Manipulation in SQL कोर्स की भी सलाह देता/देती हूँ, जो इस ट्यूटोरियल में शामिल सबक्वेरी और अन्य अवधारणाएँ सिखाता है, साथ ही हमारे Introduction to SQL Server कोर्स के साथ, जो विशेष रूप से SQL Server को कवर करता है।
डेटा एनालिटिक्स, बिज़नेस इंटेलिजेंस और डेटा साइंस में व्यावहारिक अनुभव रखने वाला डेटा साइंस तकनीकी लेखक। मैं SQL, Python, Power BI, Databricks और डेटा इंजीनियरिंग पर व्यावहारिक, उद्योग-केंद्रित सामग्री लिखता/लिखती हूँ, जो वास्तविक दुनिया की एनालिटिक्स कार्य से जुड़ी होती है। मेरी लेखनी तकनीकी गहराई और व्यावसायिक प्रभाव के बीच पुल का काम करती है, जिससे पेशेवरों को डेटा को आत्मविश्वासपूर्ण निर्णयों में बदलने में मदद मिलती है.
अक्सर पूछे जाने वाले प्रश्न
SQL PIVOT क्या है?
SQL का PIVOT ऑपरेटर क्वेरी परिणामों में पंक्तियों को स्तंभों में बदल देता है।
कौन से डेटाबेस SQL PIVOT का समर्थन करते हैं?
SQL Server और Oracle PIVOT ऑपरेटर के लिए नेटिव सपोर्ट प्रदान करते हैं। MySQL और PostgreSQL समाकलन और CASE स्टेटमेंट का उपयोग करके पिवट टेबल बनाते हैं।
PIVOT और UNPIVOT में क्या अंतर है?
PIVOT ऑपरेटर समाकलन के माध्यम से डेटा पंक्तियों को स्तंभों में बदलकर उसे अधिक पठनीय बनाता है। UNPIVOT क्लॉज़ का उपयोग स्तंभों को पंक्तियों में बदलने के लिए किया जाता है।
यदि आप समाकलन के साथ PIVOT का उपयोग करके फिर UNPIVOT करें, तो क्या डेटा अपनी मूल अवस्था में वापस आ जाता है?
नहीं, सामान्यतः समाकलन के साथ PIVOT का उपयोग करने के बाद UNPIVOT लागू करना एकदम उल्टा ऑपरेशन नहीं होता।
क्या मैं SQL में डेटा को डायनेमिक रूप से पिवट कर सकता/सकती हूँ?
SQL Server और PostgreSQL डायनेमिक पिवटिंग का समर्थन करते हैं। MySQL स्टोर्ड प्रोसीजर का उपयोग करके डायनेमिक पिवटिंग की अनुमति देता है।
क्या PIVOT को SQL क्लॉज़ के साथ संयोजित किया जा सकता है?
आप डेटा फ़िल्टर करने के लिए PIVOT ऑपरेटर को SQL क्लॉज़ के साथ संयोजित कर सकते हैं, जिनमें WHERE, GROUP BY, और ORDER BY क्लॉज़ शामिल हैं।
क्या SQL में क्रॉस-टैबुलेशन और पिवट टेबल एक ही हैं?
हाँ, क्रॉस-टैबुलेशन (क्रॉस-टैब) और SQL में पिवट टेबल मूल रूप से एक ही अवधारणा हैं। दोनों का उपयोग डेटा का सारांश बनाने और उसे अधिक सुलभ बनाने के लिए किया जाता है।
