استفاده از شرط Case در OrderBy SQL Server
گاهی مواقع نیاز است که خروجی کوئری شما با توجه به شرایط مختلف ترتیب متفاوتی داشته باشید. بطور مثال فرض کنید میخواهید لیست سفارشات بورس بر روی یک قسمت خاص را نشان بدهید، بصورت پیشفرض رعایت ترتیب زمانی کافی است اما شما میخواهید نوع کاربر ثبت کننده سفارش را هم در ترتیب سفارش تاثیر بدهید که اگر بازارگردان بود اولویت کمتری داشته باشد و در انتها لیست نشان داده شود.
در این مواقع میتوانید از کوئری شبیه کد زیر استفاده کنید:
SELECT NumberCode,
Quantity,
OrderTime,
AccountType
FROM dbo.[Order]
WHERE Side = @sideCode
AND InstrumentCode = @instrumentCode
AND Price = @price
ORDER BY CASE AccountType
WHEN 5 THEN 0
WHEN 6 THEN 2
ELSE 1
END, OrderTime;
در کد بالا اولویت کاربر با کد 5 را بالاتر از بقیه قرار دادهایم تا بالاتر از بقیه نشان داده شود، سپس کاربر با کد 6 را در انتها نشان میدهیم و در وسط هم کاربران با کد دیگر هستند.
بقیه موارد و همچنین موارد با کد یکسان هم بر اساس OrderTime مرتب میشوند.
نمونه خروجی:
38,1960,2022-07-13 11:41:32.9664630,5
36,1960,2022-07-13 11:40:32.9664630,1
40,10000,2022-07-13 11:42:08.8030760,1
41,10000,2022-07-13 11:42:14.8845340,1
20,100000,2022-07-13 11:38:11.7743590,6
255,14403,2022-07-13 12:16:49.7581740,6