دستکاری کردن عملیات Sort در SQL Server
نویسنده: فرهاد فرهمندخواه
تاریخ: ۱۳۹۱/۰۹/۱۴ ۰:۱۹
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
Create Table TestSort (ID int identity(1,1), Name nvarchar(30), Color nvarchar(15) )
Insert into TestSort (Name,color)
Values ('Adjustable Race',null)
,('Bearing Ball',null)
,('Headset Ball Bearings',null)
,('LL Crankarm','Black')
,('ML Crankarm','Black')
,('Chainring','Black')
,('Front Derailleur Cage','Silver')
,('Front Derailleur Linkage','Silver')
,('Lock Ring','Silver')
,('HL Road Frame - Red, 62','Red')
,('HL Road Frame - Red, 48','Red')
,('LL Road Frame - Red, 44','Red')
,('Full-Finger Gloves, M','RED')
,('Road-550-W Yellow, 38','Yellow')
,('Road-550-W Yellow, 40','Yellow')
,('Road-550-W Yellow, 42','Yellow')
,('Classic Vest, S','Blue')
,('Classic Vest, M','Blue')
,('Classic Vest, L','Blue')
Select t.ID,t.Name,t.Color from TestSort as t order by t.Color
Select t.ID,t.Name,t.Color from TestSort as t Where t.color is not null order by Case t.Color When 'Red' Then Null Else t.color End;
Select * into Simulation from (Select t.ID,t.Name,t.Color, Case t.Color When 'Red' Then Null Else t.color End RedNull from TestSort as t Where t.color is not null) A
Select * from Simulation order by Rednull
Select ID,t.Name,Color
from TestSort
Where t.color is not null
order by case when color = 'red' then 0 else 1 end,
color;
SELECT * FROM ( SELECT i.* FROM dbo.ProductInventory i )bb ORDER BY CASE WHEN @IdOrderList = 1 THEN bb.Inventory END DESC, CASE WHEN @IdOrderList = 2 THEN bb.TotalPrice END ASC, CASE WHEN @IdOrderList = 3 THEN bb.TotalPrice END DESC, CASE WHEN @IdOrderList = 4 THEN bb.Inventory END ASC, CASE WHEN @IdOrderList = 5 THEN bb.Inventory END DESC, CASE WHEN @IdOrderList = 5 THEN bb.TotalPrice END ASC, CASE WHEN @IdOrderList = 6 THEN bb.Inventory END DESC, CASE WHEN @IdOrderList = 6 THEN bb.TotalPrice END DESC
CASE @IdOrderList WHEN 5 THEN bb.Inventory END DESC, bb.TotalPrice, CASE @IdOrderList WHEN 6 THEN bb.Inventory END DESC, bb.TotalPrice DESC
ORDER BY CASE WHEN @IdOrderList = 1 THEN bb.Inventory END DESC, CASE WHEN @IdOrderList = 2 THEN bb.TotalPrice END ASC, CASE WHEN @IdOrderList = 3 THEN bb.TotalPrice END DESC, CASE WHEN @IdOrderList = 4 THEN bb.Inventory END ASC, CASE WHEN @IdOrderList = 5 THEN bb.Inventory END DESC, CASE WHEN @IdOrderList = 5 THEN bb.TotalPrice END ASC, --CASE WHEN @IdOrderList = 6 THEN bb.Inventory END DESC, --CASE WHEN @IdOrderList = 6 THEN bb.TotalPrice END DESC CASE @IdOrderList WHEN 5 THEN bb.Inventory END DESC, bb.TotalPrice, CASE @IdOrderList WHEN 6 THEN bb.Inventory END DESC, bb.TotalPrice DESC OFFSET (@PageIndex-1)*20 ROWS FETCH NEXT 20 ROWS ONLY