如何订购与where I.ItemCode in ()
序列
(按子句中的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 :(得分: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
答案 1 :(得分:1)
您还可以使用CTE
及其订单定义ItemCodes
,然后JOIN
CTE
现有查询。这样您就可以同时对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]