与在condtion中的位置相同

时间:2016-10-11 06:19:19

标签: sql sql-server

如何订购与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

2 个答案:

答案 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]