केवल थोड़ा मूर्खतापूर्ण द्वारा किया जा रहा:
CREATE PROCEDURE [dbo].[TopVRM]
@orderby varchar(255)
AS
SELECT Peroid1.Pareto FROM dbo.Peroid1
GROUP by Pareto
ORDER by CASE WHEN @orderby='ASC' THEN Pareto END,
CASE WHEN @orderby='DESC' THEN Pareto END DESC
आप नहीं करते सख्ती से सब पर एक CASE
अभिव्यक्ति में दूसरे प्रकार हालत डाल करने के लिए (जरूरत *), और यदि Pareto
संख्यात्मक है, तो आप केवल CASE WHEN @orderby='ASC' THEN 1 ELSE -1 END * Pareto
करने का निर्णय ले सकते हैं
(*) दूसरी तरह की स्थिति केवल तब प्रभाव डालती है जब पहली तरह की स्थिति दो पंक्तियों को बराबर मानती है। यह या तो जब दोनों पंक्तियों में एक ही परेटो मूल्य है (इसलिए क्रम उल्टा करें भी बराबर उन पर विचार करेंगे) क्योंकि पहली CASE
अभिव्यक्ति लौटने NULL
एस के, (ताकि @orderby
नहीं 'ASC'
है है, तो हम DESC
निष्पादित करना चाहते हैं । क्रम में
CREATE PROCEDURE [dbo].[TopVRM]
@orderby varchar(255)
AS
SELECT * FROM (
SELECT
*,
ROW_NUMBER() OVER (ORDER BY Pareto) as rn1,
ROW_NUMBER() OVER (ORDER BY Pareto DESC) as rn2
FROM (
SELECT Peroid1.Pareto
FROM dbo.Peroid1
GROUP by Pareto
) t
) t2
WHERE rn1 between 1 and 10 or rn2 between 1 and 10
ORDER BY rn1
यह आप शीर्ष 10 और नीचे 10 दे देंगे,: प्रकार
तुम भी एक ही बार में दोनों परिणाम सेट पुन: प्राप्त करने के बजाय दो कॉल करने पर विचार करना चाह सकते हैं ऊपर से नीचे तक। लेकिन यदि कुल मिलाकर 20 से कम परिणाम हैं, तो आपको अपनी वर्तमान योजना के विपरीत डुप्लीकेट नहीं मिलेगा।
स्रोत
2012-09-13 13:22:03
"डेटा" क्या डेटा प्रकार है? – podiluska