2016-10-11 8 views
0

にどのように私は、where I.ItemCode in()シーケンス注文condtion

(句のselect文での値の順序でソート)

クエリ

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

するTry ORDER I.ItemCodeのASC/DESC BY:これは、あなたがしたいシーケンスの両方ItemCode上のフィルタ行と注文行することができるようになります。 –

答えて

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 byIN

+0

これは素晴らしいトリック@Prdpでした。好きでした。 –

+0

@ AT-2016 - ありがとう –

1

に基づきます。また、既存のクエリに、あなたのItemCodesとその順序で、その後JOINCTECTEを定義することができます構築する必要があります。

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]