Microsoft SQL Server
पंक्तियों को क्रमबद्ध / क्रमबद्ध करना
खोज…
मूल बातें
सबसे पहले, उदाहरण तालिका सेट करते हैं।
-- Create a table as an example
CREATE TABLE SortOrder
(
ID INT IDENTITY PRIMARY KEY,
[Text] VARCHAR(256)
)
GO
-- Insert rows into the table
INSERT INTO SortOrder ([Text])
SELECT ('Lorem ipsum dolor sit amet, consectetur adipiscing elit')
UNION ALL SELECT ('Pellentesque eu dapibus libero')
UNION ALL SELECT ('Vestibulum et consequat est, ut hendrerit ligula')
UNION ALL SELECT ('Suspendisse sodales est congue lorem euismod, vel facilisis libero pulvinar')
UNION ALL SELECT ('Suspendisse lacus est, aliquam at varius a, fermentum nec mi')
UNION ALL SELECT ('Praesent tincidunt tortor est, nec consequat dolor malesuada quis')
UNION ALL SELECT ('Quisque at tempus arcu')
GO
याद रखें कि डेटा पुनर्प्राप्त करते समय, यदि आप एक पंक्ति ऑर्डरिंग क्लॉज़ (ORDER BY) निर्दिष्ट नहीं करते हैं, तो SQL सर्वर किसी भी समय सॉर्टिंग (स्तंभों का क्रम) की गारंटी नहीं देता है। वास्तव में, किसी भी समय। और इस बारे में बहस करने का कोई मतलब नहीं है, इसे हजारों बार और पूरे इंटरनेट पर साक्षर दिखाया गया है।
कोई आदेश नहीं == कोई छँटाई नहीं। कहानी का अंत।
-- It may seem the rows are sorted by identifiers,
-- but there is really no way of knowing if it will always work.
-- And if you leave it like this in production, Murphy gives you a 100% that it wont.
SELECT * FROM SortOrder
GO
दो दिशाओं के डेटा द्वारा आदेश दिए जा सकते हैं:
- आरोही (ऊपर की ओर बढ़ते हुए), एएससी का उपयोग करते हुए
- अवरोही (नीचे की ओर बढ़ते हुए), DESC का उपयोग करते हुए
-- Ascending - upwards
SELECT * FROM SortOrder ORDER BY ID ASC
GO
-- Ascending is default
SELECT * FROM SortOrder ORDER BY ID
GO
-- Descending - downwards
SELECT * FROM SortOrder ORDER BY ID DESC
GO
जब पाठ स्तंभ ((n) चार या (n) चरचर) द्वारा आदेश दिया जाता है, तो ध्यान दें कि आदेश टकराव का सम्मान करता है। टकराव के बारे में अधिक जानकारी के लिए विषय के लिए देखें।
डेटा का आदेश देना और छांटना संसाधनों का उपभोग कर सकता है। यह वह जगह है जहाँ ठीक से बनाए गए इंडेक्स काम आते हैं। अनुक्रमित पर अधिक जानकारी के लिए विषय के लिए देखें।
आपके परिणाम में पंक्तियों के क्रम को छद्म करने की संभावना है। बस आदेश को nondeterministic प्रकट करने के लिए मजबूर करें।
SELECT * FROM SortOrder ORDER BY CHECKSUM(NEWID())
GO
आदेश को एक संग्रहीत कार्यविधि में याद किया जा सकता है, और यही तरीका है कि आपको इसे करना चाहिए अगर यह अंतिम उपयोगकर्ता को दिखाने से पहले पंक्तियों में हेरफेर करने का अंतिम चरण है।
CREATE PROCEDURE GetSortOrder
AS
SELECT *
FROM SortOrder
ORDER BY ID DESC
GO
EXEC GetSortOrder
GO
SQL सर्वर दृश्य में आदेश देने के लिए एक सीमित (और हैकी) समर्थन है, लेकिन इसका उपयोग न करने के लिए प्रोत्साहित किया जाना चाहिए।
/* This may or may not work, and it depends on the way
your SQL Server and updates are installed */
CREATE VIEW VwSortOrder1
AS
SELECT TOP 100 PERCENT *
FROM SortOrder
ORDER BY ID DESC
GO
SELECT * FROM VwSortOrder1
GO
-- This will work, but hey... should you really use it?
CREATE VIEW VwSortOrder2
AS
SELECT TOP 99999999 *
FROM SortOrder
ORDER BY ID DESC
GO
SELECT * FROM VwSortOrder2
GO
आदेश देने के लिए आप या तो अपने ORDER BY में कॉलम नाम, उपनाम या स्तंभ संख्या का उपयोग कर सकते हैं।
SELECT *
FROM SortOrder
ORDER BY [Text]
-- New resultset column aliased as 'Msg', feel free to use it for ordering
SELECT ID, [Text] + ' (' + CAST(ID AS nvarchar(10)) + ')' AS Msg
FROM SortOrder
ORDER BY Msg
-- Can be handy if you know your tables, but really NOT GOOD for production
SELECT *
FROM SortOrder
ORDER BY 2
मैं आपके कोड में संख्याओं का उपयोग करने के खिलाफ सलाह देता हूं, सिवाय इसके कि यदि आप इसे निष्पादित करने के बाद पल के बारे में भूलना चाहते हैं।
केस द्वारा आदेश
यदि आप अपने डेटा को संख्यात्मक या वर्णानुक्रम में सॉर्ट करना चाहते हैं, तो आप बस order by [column]
उपयोग कर सकते हैं। यदि आप एक कस्टम पदानुक्रम का उपयोग करके सॉर्ट करना चाहते हैं, तो केस स्टेटमेंट का उपयोग करें।
Group
-----
Total
Young
MiddleAge
Old
Male
Female
order by
मूल order by
का उपयोग करना:
Select * from MyTable
Order by Group
एक वर्णानुक्रमिक रिटर्न देता है, जो हमेशा वांछनीय नहीं होता है:
Group
-----
Female
Male
MiddleAge
Old
Total
Young
'केस' स्टेटमेंट जोड़ते हुए, अपने डेटा को क्रमबद्ध करने के क्रम में बढ़ते संख्यात्मक मान निर्दिष्ट करना:
Select * from MyTable
Order by case Group
when 'Total' then 10
when 'Male' then 20
when 'Female' then 30
when 'Young' then 40
when 'MiddleAge' then 50
when 'Old' then 60
end
निर्दिष्ट क्रम में डेटा लौटाता है:
Group
-----
Total
Male
Female
Young
MiddleAge
Old