2016-10-11 27 views
0

我怎麼能(在子句的SELECT語句排序值排序)排序相同,其中在condtion

查詢順序相同where I.ItemCode in()序列

記錄

SELECT I.ItemCode,I.ItemName,UM.Name As Unit, 
     SUM(CASE WHEN Rs.RestaurantID=1 THEN RD.Quantity ELSE Null END) [res1], 
     SUM(CASE WHEN Rs.RestaurantID=2 THEN RD.Quantity ELSE Null END) [res2], 

     SUM(RD.Quantity)TOTAL_QTY 
FROM DBO.ITEMS I 
LEFT JOIN UnitMeasure UM 
ON I.UnitMeasureID=UM.UnitMeasureID 
LEFT OUTER JOIN DBO.RequisitionDetails RD 
ON I.ItemID=RD.ItemID 
LEFT JOIN Requisitions R 
ON RD.RequisitionID=R.RequisitionID 
LEFT JOIN Restaurants Rs 
ON R.RestaurantID=Rs.RestaurantID 


where I.ItemCode in (355,365,360,275,335,350,395,320,310,340,345,305,325,315,388,300,383,385,250,245,453,326,366,368,375) and r.RequisitionDate='2016-09-23' 


GROUP BY I.ItemCode,I.ItemName,UM.Name 
+0

嘗試ORDER BY I.ItemCode ASC/DESC。 –

回答

2

您需要明確硬編碼Order by的排序

Order by Case ItemCode when 355 then 0 
         when 365 then 1 
         when 360 then 2 
         when 275 then 3 
         .. 
         when 368 then 24 
         when 375 then 25 end asc 

每次你可能要建Order by基於IN條款

+0

這是一個不錯的技巧@Prdp。喜歡它。 –

+0

@ AT-2016 - 謝謝你 –

1

你也可以定義一個CTEItemCodes和它們的順序,然後JOINCTE到現有的查詢。這將使您在ItemCode兩個過濾行和訂單行你想要的順序:

WITH ItemCodes AS (
    SELECT 0 AS [Order], 355 AS ItemCode UNION ALL 
    SELECT 1 AS [Order], 365 AS ItemCode UNION ALL 
    SELECT 2 AS [Order], 360 AS ItemCode 
) 

SELECT I.ItemCode,I.ItemName,UM.Name As Unit, 
     SUM(CASE WHEN Rs.RestaurantID=1 THEN RD.Quantity ELSE Null END) [res1], 
     SUM(CASE WHEN Rs.RestaurantID=2 THEN RD.Quantity ELSE Null END) [res2], 

     SUM(RD.Quantity)TOTAL_QTY 
FROM DBO.ITEMS I 
JOIN ItemCodes 
ON I.ItemCode = ItemCodes.ItemCode 
LEFT JOIN UnitMeasure UM 
ON I.UnitMeasureID=UM.UnitMeasureID 
LEFT OUTER JOIN DBO.RequisitionDetails RD 
ON I.ItemID=RD.ItemID 
LEFT JOIN Requisitions R 
ON RD.RequisitionID=R.RequisitionID 
LEFT JOIN Restaurants Rs 
ON R.RestaurantID=Rs.RestaurantID 


where r.RequisitionDate='2016-09-23' 


GROUP BY I.ItemCode,I.ItemName,UM.Name 

ORDER BY ItemCodes.[Order]