रैंकिंग और पंक्ति कार्यों का उपयोग करें
रैंकिंग और पंक्तिबद्ध फ़ंक्शन स्केलर फ़ंक्शन नहीं हैं क्योंकि वे एक भी मान वापस नहीं करते हैं। ये फ़ंक्शन पंक्तियों के एक सेट को इनपुट के रूप में स्वीकार करते हैं और आउटपुट के रूप में पंक्तियों का एक सेट लौटाते हैं।
रैंकिंग कार्य
रैंकिंग फ़ंक्शन आपको पंक्तियों के उपयोगकर्ता-परिभाषित सेट के खिलाफ गणना करने की अनुमति देते हैं। इन कार्यों में रैंकिंग, ऑफ़सेट, एग्रीगेट और वितरण फ़ंक्शन शामिल हैं।
यह उदाहरण ListPrice के आधार पर रैंकिंग की गणना करने के लिए RANK फ़ंक्शन का उपयोग करता है, जिसमें उच्चतम मूल्य 1 पर रैंक किया गया है:
SELECT TOP 100 ProductID, Name, ListPrice,
RANK() OVER(ORDER BY ListPrice DESC) AS RankByPrice
FROM Production.Product AS p
ORDER BY RankByPrice;
क्वेरी परिणाम इस तरह दिख सकते हैं:
उत्पाद आईडी
नाम
सूचीमूल्य
रैंकबायप्राइस
749
रोड-150 रेड, 62
3578.27
1
750
रोड-150 रेड, 44
3578.27
1
751
सड़क-150 लाल, 48
3578.27
1
771
माउंटेन-100 सिल्वर, 38
3399.99
4
772
माउंटेन-100 सिल्वर, 42
3399.99
4
775
माउंटेन-100 ब्लैक, 38
3374.99
6
...
...
...
...
ऊपर
आप डेटा के भीतर विभाजन, या समूहीकरण को परिभाषित करने के लिए ओवर क्लॉज का उपयोग कर सकते हैं। उदाहरण के लिए, निम्न क्वेरी प्रत्येक श्रेणी के उत्पादों के लिए मूल्य-आधारित रैंकिंग की गणना करने के लिए पिछले उदाहरण का विस्तार करती है.
SELECT c.Name AS Category, p.Name AS Product, ListPrice,
RANK() OVER(PARTITION BY c.Name ORDER BY ListPrice DESC) AS RankByPrice
FROM Production.Product AS p
JOIN Production.ProductCategory AS c
ON p.ProductCategoryID = c.ProductcategoryID
ORDER BY Category, RankByPrice;
इस क्वेरी के परिणाम कुछ इस तरह दिख सकते हैं:
कोटि
गुणनफल
सूचीमूल्य
रैंकबायप्राइस
Bib-Shorts
पुरुषों की बिब-शॉर्ट्स, एस
89.99
1
Bib-Shorts
पुरुषों की बिब-शॉर्ट्स, एम
89.99
1
बाइक रैक
हिच रैक - 4-बाइक
120
1
बाइक स्टैंड
All-Purpose बाइक स्टैंड
159
1
बोतलें और पिंजरे
माउंटेन बोतल केज
9.99
1
बोतलें और पिंजरे
सड़क की बोतल पिंजरे
8.99
2
बोतलें और पिंजरे
पानी की बोतल - 30 ऑउंस।
4.99
3
नीचे कोष्ठक
एचएल बॉटम ब्रैकेट
121.49
1
नीचे कोष्ठक
एमएल बॉटम ब्रैकेट
101.24
2
नीचे कोष्ठक
एलएल बॉटम ब्रैकेट
53.99
3
...
...
...
...
नोट
ध्यान दें कि कई पंक्तियों में समान रैंक मान है और कुछ मान छोड़ दिए गए हैं। ऐसा इसलिए है क्योंकि हम केवल RANK का उपयोग कर रहे हैं। आवश्यकता के आधार पर, आप समान रैंक मूल्य पर संबंधों से बचना चाह सकते हैं। आप आवश्यकतानुसार अन्य कार्यों, DENSE_RANK, एनटीआईएल और ROW_NUMBER के साथ रैंक मान को नियंत्रित कर सकते हैं। इन कार्यों के विवरण के लिए, Transact-SQL संदर्भ दस्तावेज देखें।
रोसेट फ़ंक्शन
Rowset फ़ंक्शन एक वर्चुअल तालिका लौटाते हैं जिसका उपयोग FROM क्लॉज में डेटा स्रोत के रूप में किया जा सकता है. ये फ़ंक्शन पंक्तिसेट फ़ंक्शन के लिए विशिष्ट पैरामीटर लेते हैं। इनमें OPENDATASOURCE, OPENQUERY, OPENROWSET, OPENXML और OPENJSON शामिल हैं।
OPENDATASOURCE, OPENQUERY, और OPENROWSET फ़ंक्शन आपको किसी दूरस्थ डेटाबेस सर्वर पर क्वेरी पास करने में सक्षम करते हैं. दूरस्थ सर्वर तब परिणाम पंक्तियों का एक सेट लौटाएगा। उदाहरण के लिए, निम्न क्वेरी SalesDB नामक SQL Server आवृत्ति से क्वेरी के परिणाम प्राप्त करने के लिए OPENROWSET का उपयोग करता है।
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=SalesDB;Trusted_Connection=yes;',
'SELECT Name, ListPrice
FROM AdventureWorks.Production.Product') AS a;
दूरस्थ सर्वर का उपयोग करने के लिए, आपको SQL सर्वर आवृत्ति में कुछ उन्नत विकल्पों को सक्षम करना होगा जहाँ आप क्वेरी चला रहे हैं.
OPENXML और OPENJSON फ़ंक्शन आपको XML या JSON फ़ॉर्मैट में स्ट्रक्चर्ड डेटा क्वेरी करने और टेबल पंक्ति में मान निकालने में मदद करते हैं.
पंक्तिबद्ध कार्यों का एक विस्तृत अन्वेषण इस मॉड्यूल के दायरे से परे है। अधिक जानकारी के लिए, Transact-SQL संदर्भ दस्तावेज़ देखें।