我有一个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子句中的项目顺序获取选择结果。
答案 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子句中的项目顺序获取选择结果?”
对于这个特定问题,答案是否。