是否可以根据in子句的顺序选择记录?

时间:2015-10-05 15:45:27

标签: sql-server tsql

我有一个select语句,我在其中使用了子句。

这是我的表:MyTable

Id     SKU
1      112
2      223
3      445
4      456
5      678

如果我写:

SELECT Id 
FROM MyTable 
WHERE SKU IN (112,223,445, 456, 678)

我没有得到结果

1
2
3
4
5

有没有办法根据in子句中的项目顺序获取选择结果。

2 个答案:

答案 0 :(得分:-1)

对于您的案例ORDER BY id就足够了。

SELECT Id 
FROM MyTable 
WHERE SKU IN (112,223,445, 456, 678)
ORDER BY id

对于一般方法,您可以将JOIN与派生表一起使用,如:

<强> Demo

SELECT m.Id 
FROM MyTable m
JOIN (VALUES (1, 112) ,(2,223) ,(3,445), (4,456), (5,678)) AS t(num, SKU)
  ON m.SKU = t.SKU 
ORDER BY t.num

如果您使用SQL Server 2008,则可以使用UNION ALL

<强> Demo2

;WITH cte AS
(
  SELECT 112 AS SKU, 1 AS orderNum
  UNION ALL
  SELECT 223 AS SKU, 2 AS orderNum
  UNION ALL
  SELECT 445 AS SKU, 3 AS orderNum
  UNION ALL
  SELECT 456 AS SKU, 4 AS orderNum
  UNION ALL
  SELECT 678 AS SKU, 5 AS orderNum
)
SELECT m.Id 
FROM #MyTable m
JOIN cte c
  ON m.SKU = c.SKU 
ORDER BY c.orderNum;

一般方法不会强制您创建自定义查询,您可以使用IDENTITY列的临时表,如:

<强> Demo3

CREATE TABLE #mySKU( orderNum INT IDENTITY(1,1), SKU INT);

INSERT INTO #mySKU
VALUES (112),(223),(445), (456), (678);

SELECT m.Id 
FROM #MyTable m
JOIN #mySKU c
  ON m.SKU = c.SKU 
ORDER BY c.orderNum;

答案 1 :(得分:-1)

“有没有办法根据in子句中的项目顺序获取选择结果?”

对于这个特定问题,答案是