Sadece biraz saçma kalarak: Bilemezsin
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
kesinlikle (hiç bir CASE
ifadede ikinci sıralama koşulunu koymak gerek *) ve Pareto
sayısal ise, yalnızca CASE WHEN @orderby='ASC' THEN 1 ELSE -1 END * Pareto
yapmaya karar verebilirsiniz
(*) İkinci sıralama koşulu, yalnızca birinci sıralama koşulunun iki satırın eşit olacağı düşünüldüğünde bir etkisi vardır. Bu, her iki satır aynı Pareto değere sahip (bu yüzden ters sıralama da eşit bunları dikkate alacağını) ilk CASE
ifade NULL
s dönüyor nedeniyle, zaman ya (bu yüzden @orderby
'ASC'
değildir, bu yüzden DESC
gerçekleştirmek istediğiniz . sırayla,
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
Bu, ilk 10 ve alt 10 verecek: sort
Ayrıca tek seferde hem sonuç kümelerini almak yerine iki çağrı yapıyor düşünebilirsiniz baştan aşağı. Ancak toplamda 20'den az sonuç varsa, mevcut planınızdan farklı olarak iki kopya alamazsınız.
Hangi veri türü "Pareto"? – podiluska