Database
 sql >> डेटाबेस >  >> RDS >> Database

PIVOT, UNPIVOT, और रिवर्स PIVOT स्टेटमेंट को समझना

PIVOT स्टेटमेंट का उपयोग टेबल पंक्तियों को कॉलम में बदलने के लिए किया जाता है, जबकि UNPIVOT ऑपरेटर कॉलम को वापस पंक्तियों में परिवर्तित करता है। PIVOT स्टेटमेंट को उलटना मूल डेटासेट को पुनः प्राप्त करने के लिए UNPIVOT ऑपरेटर को पहले से PIVOTED डेटासेट पर लागू करने की प्रक्रिया को संदर्भित करता है।

इस लेख में, हम अलग-अलग उदाहरणों पर इन तीन अवधारणाओं का अध्ययन करेंगे।

पिवट ऑपरेटर

जैसा कि पहले उल्लेख किया गया है, PIVOT ऑपरेटर तालिका पंक्तियों को स्तंभों में परिवर्तित करता है। उदाहरण के लिए, यदि आपके पास ऐसी तालिका है जो इस तरह दिखती है:

और इसे तीसरे कॉलम से पिवट करें, परिणाम इस प्रकार होगा:

मूल तालिका में, हमारे पास पाठ्यक्रम कॉलम के लिए दो अद्वितीय मान थे - अंग्रेजी और इतिहास। पिवोटेड टेबल में इन यूनिक वैल्यूज को कॉलम में बदल दिया गया है। आप देख सकते हैं कि प्रत्येक नए कॉलम के लिए स्कोर मान अपरिवर्तित रहते हैं। उदाहरण के लिए, मूल तालिका में, एक छात्र सैली ने अंग्रेजी में 95 अंक प्राप्त किए थे, जो पिवट तालिका के मानों के विपरीत था।

लाइव डेटाबेस में कोई भी समायोजन करने से पहले हमेशा की तरह सुनिश्चित करें कि आप एक सुरक्षित बैकअप बना लें।

आइए SQL सर्वर में PIVOT ऑपरेटर का उपयोग करने के इस उदाहरण को देखें।

CREATE DATABASE School
GO

USE School
GO

CREATE TABLE Students
(
	Id INT PRIMARY KEY IDENTITY,
	StudentName VARCHAR (50),
	Course VARCHAR (50),
	Score INT
)
GO

INSERT INTO Students VALUES ('Sally', 'English', 95 )
INSERT INTO Students VALUES ('Sally', 'History', 82)
INSERT INTO Students VALUES ('Edward', 'English', 45)
INSERT INTO Students VALUES ('Edward', 'History', 78)

ऊपर दी गई स्क्रिप्ट स्कूल डेटाबेस बनाती है। डेटाबेस में, हम चार कॉलम, जैसे कि आईडी, स्टूडेंटनाम, कोर्स और स्कोर के साथ स्टूडेंट्स टेबल बनाते हैं। अंत में, हम छात्र तालिका में चार डमी रिकॉर्ड जोड़ते हैं।

अब, यदि आप सभी रिकॉर्ड्स को पुनः प्राप्त करने के लिए एक सेलेक्ट स्टेटमेंट का उपयोग करते हैं, तो आप निम्नलिखित देखेंगे:

आइए इस तालिका को पाठ्यक्रम कॉलम द्वारा पिवोट करें। ऐसा करने के लिए, निम्न स्क्रिप्ट निष्पादित करें:

SELECT * FROM
 
(SELECT 
	StudentName,
	Score,
	Course
FROM 
	Students
)
AS StudentTable
PIVOT(
	SUM(Score)
	FOR Course IN ([English],[History])
) AS SchoolPivot

देखते हैं कि स्क्रिप्ट में क्या हो रहा है। पहली पंक्ति में, हम उन कॉलम को परिभाषित करने के लिए SELECT स्टेटमेंट का उपयोग करते हैं जिन्हें हम पिवोटेड टेबल में जोड़ना चाहते हैं। पहले दो कॉलम स्टूडेंटनाम और स्कोर हैं। इन दो स्तंभों का डेटा सीधे छात्र तालिका से आएगा। तीसरा कॉलम कोर्स है। हम अपनी तालिका को पाठ्यक्रम स्तंभ द्वारा PIVOT करना चाहते हैं, इसलिए, पाठ्यक्रम स्तंभ को पाठ्यक्रम स्तंभ के लिए PIVOT ऑपरेटर द्वारा निर्दिष्ट मानों के बराबर स्तंभों की संख्या में विभाजित किया जाएगा।

PIVOT ऑपरेटर के लिए सिंटैक्स सरल है। सबसे पहले, आपको उस कॉलम पर एक समग्र फ़ंक्शन लागू करना होगा, जिसके मान आप पिवोटेड कॉलम में प्रदर्शित करना चाहते हैं। हमारे मामले में, हम स्कोर को पिवोटेड कॉलम में दिखाना चाहते हैं - अंग्रेजी और इतिहास। अंत में, हम पिवट कॉलम और उसमें अद्वितीय मानों को निर्दिष्ट करने के लिए फॉर स्टेटमेंट का उपयोग करते हैं। परिणाम इस तरह दिखता है:

अनपिवोट ऑपरेटर

UNPIVOT ऑपरेटर का उपयोग टेबल कॉलम को पंक्तियों में बदलने के लिए किया जाता है। उदाहरण के लिए, यदि आपके पास ऐसी तालिका है जो इस तरह दिखती है:

UNPIVOT ऑपरेटर निम्नलिखित परिणाम लौटाएगा:

मूल तालिका के स्तंभों को अचिह्नित तालिका में पंक्तियों में बदल दिया गया है। आइए उस डेटा का उपयोग करके देखें कि SQL में UNPIVOT ऑपरेटर कैसे काम करता है।

ऐसा करने के लिए, निम्न स्क्रिप्ट निष्पादित करें:

CREATE DATABASE School2
GO

USE School2
GO

CREATE TABLE Students
(
	Id INT PRIMARY KEY IDENTITY,
	StudentName VARCHAR (50),
	Math INT,
	English INT,
	History INT,
	Science INT
)
GO

INSERT INTO Students VALUES ('Sally', 78, 85, 91, 76 )
INSERT INTO Students VALUES ('Edward', 87, 90, 82, 87)

यदि आप स्कूल2 डेटाबेस की छात्र तालिका से डेटा का चयन करते हैं, तो आपको निम्नलिखित परिणाम दिखाई देंगे:

इस तालिका में UNPIVOT ऑपरेटर को लागू करने के लिए, निम्न क्वेरी चलाएँ:

SELECT StudentName, Course, Score
FROM Students
UNPIVOT
(
	Score
	FOR Course in (Math, English, History, Science)
) AS SchoolUnpivot

UNPIVOT ऑपरेटर के लिए सिंटैक्स PIVOT एक के समान है। चयन कथन में, आपको उन स्तंभों को निर्दिष्ट करने की आवश्यकता है जिन्हें आप आउटपुट तालिका में जोड़ना चाहते हैं। UNPIVOT स्टेटमेंट में, आप दो कॉलम निर्दिष्ट करेंगे:

  1. पहले कॉलम में पिवोटेड कॉलम की पंक्तियों के मान होते हैं (जो इस मामले में स्कोर है)।
  2. दूसरे कॉलम में पिवोटेड कॉलम के नाम शामिल हैं, यानी गणित, अंग्रेजी, इतिहास और विज्ञान।

आउटपुट टेबल इस तरह दिखेगी:

पिवट उलटना

PIVOT ऑपरेटर को उलटना मूल तालिका पर वापस जाने के लिए UNPIVOT ऑपरेटर को पिवट टेबल पर लागू करने की प्रक्रिया को संदर्भित करता है।

गैर-समग्र पिवोट तालिका को उलटना

PIVOT ऑपरेटर को उलटना केवल तभी संभव है जब पिवट तालिका में समेकित डेटा न हो।

आइए उस तालिका को देखें जिसका उपयोग हमने इस लेख के PIVOT खंड में किया है।

आप देख सकते हैं कि कोई दोहराई गई पंक्तियाँ नहीं हैं। दूसरे शब्दों में, हम कह सकते हैं कि प्रत्येक छात्र के लिए प्रति पाठ्यक्रम केवल एक रिकॉर्ड है। उदाहरण के लिए, सैली के पास अंग्रेजी पाठ्यक्रम में उसके स्कोर का केवल एक रिकॉर्ड है।

जब हमने उपरोक्त तालिका में PIVOT ऑपरेटर को लागू किया तो हमें निम्नलिखित परिणाम मिले:

अब, हम इस परिणाम के लिए UNPIVOT ऑपरेटर को लागू करने जा रहे हैं और देखें कि क्या हम मूल तालिका में वापस आ सकते हैं। ऐसा करने के लिए, निम्न स्क्रिप्ट निष्पादित करें:

नोट:

हम इस क्वेरी को स्कूल डेटाबेस पर निष्पादित कर सकते हैं जिसे हमने PIVOT ऑपरेटर सेक्शन में बनाया है।

SELECT StudentName, Course, Score
FROM
(SELECT * FROM
 
(SELECT 
	StudentName,
	Score,
	Course
FROM 
	Students
)
AS StudentTable
PIVOT(
	SUM(Score)
	FOR Course IN ([English],[History])
) AS SchoolPivot) PivotedResults
UNPIVOT
(
	Score
	FOR Course in (English, History)
) AS Schoolunpivot

यहां हम पिवोटेड डेटा पर UNPIVOT ऑपरेटर को लागू करने के लिए एक सबक्वेरी का उपयोग करते हैं। आंतरिक क्वेरी PIVOT ऑपरेटर को नियोजित करती है, जबकि बाहरी क्वेरी UNPIVOT ऑपरेटर का उपयोग करती है। आउटपुट पर, आप मूल छात्र तालिका देखेंगे।

समग्र पिवोट तालिका को उलटना

हमने पहले कहा था कि केवल एक PIVOT ऑपरेटर को रिवर्स करना संभव है जिसमें समग्र डेटा शामिल नहीं है। आइए समेकित डेटा वाले PIVOT कथन को उलटने का प्रयास करें।

स्कूल डेटाबेस की छात्र तालिका में एक और रिकॉर्ड जोड़ें जिसे हमने इस लेख के पहले खंड में बनाया है। ऐसा करने के लिए, निम्न क्वेरी चलाएँ:

INSERT INTO Students VALUES ('Edward', 'History', 78)

अब, यदि आप छात्र तालिका से सभी रिकॉर्ड का चयन करते हैं, तो आपको निम्न आउटपुट प्राप्त होगा:

हम देख सकते हैं कि इतिहास में एडवर्ड के स्कोर के लिए हमारे पास एक डुप्लीकेट रिकॉर्ड है।

अब, इस तालिका में PIVOT ऑपरेटर लागू करें।

SELECT Id, StudentName, English, History
FROM Students
PIVOT
(
	SUM (Score)
	FOR Course in (English, History)
) AS Schoolpivot

आउटपुट से, आप देख सकते हैं कि PIVOT ऑपरेटर में SUM फ़ंक्शन ने एडवर्ड द्वारा लिए गए इतिहास पाठ्यक्रम में दो स्कोर जोड़े हैं। यदि आप इस तालिका की धुरी को उलटने का प्रयास करते हैं (अर्थात UNPIVOT ऑपरेटर लागू करें), तो आपको मूल तालिका प्राप्त नहीं होगी। यह मूल पांच के बजाय चार रिकॉर्ड लौटाएगा। छात्र एडवर्ड के इतिहास कॉलम में व्यक्तिगत परिणामों के बजाय समग्र परिणाम होगा।

इसे देखने के लिए, निम्न स्क्रिप्ट निष्पादित करें:

SELECT StudentName, Course, Score
FROM
(SELECT * FROM
 
(SELECT 
	StudentName,
	Score,
	Course
FROM 
	Students
)
AS StudentTable
PIVOT(
	SUM(Score)
	FOR Course IN ([English],[History])
) AS SchoolPivot) PivotedResults
UNPIVOT
(
	Score
	FOR Course in (English, History)
) AS Schoolunpivot

आउटपुट टेबल इस तरह दिखेगी:

संदर्भ:

  • Microsoft:PIVOT और UNPIVOT का उपयोग करना
  • कोडिंगसाइट:SQL में PIVOT का उपयोग करना
  • यूट्यूब:रिवर्स पिवोट वीडियो

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DBCC CLONEDATABASE के उपयोग का विस्तार

  2. अनपेक्षित क्लस्टर इंडेक्स फ़्रेग्मेंटेशन

  3. चॉकलेटी पर होस्टिंग पैकेज

  4. प्राथमिक कुंजी पर अनुक्रमणिका के लिए एक साधारण उपयोग केस

  5. एसक्यूएल चयन मिन