我有一个select语句,我在where子句中使用。是否可以根据子句的顺序选择记录?
这里是我的表: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条款中的物品订单。?
我有一个select语句,我在where子句中使用。是否可以根据子句的顺序选择记录?
这里是我的表: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条款中的物品订单。?
对于你的情况ORDER BY id
就足够了。
SELECT Id
FROM MyTable
WHERE SKU IN (112,223,445, 456, 678)
ORDER BY id
对于您可以使用JOIN
与派生表像一般的方法:
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
:
;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
列,如:
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;
如果skus值是动态的,该怎么办?我们如何使用一般方法? – user123456
@ user123456如果SKU是动态的,而不是IN('a','b','c'),则需要生成值为JOIN的值对,如'((1,'a'),(2,'b')) ,(3,'c'))' – lad2025
**对于downvoters,我会很高兴知道提出的解决方案有什么问题** – lad2025
“有没有什么办法让根据条款中的项目顺序选择结果?“
对于这个特定的问题,答案是否。
“如果我写:...我没有得到结果......”,但如果您的“这是我的表:MyTable”语句是真的,您应该。你的问题显然缺乏澄清你真正拥有的东西以及你真正想要的东西。 – pkuderov
总之:没有。如果“IN”列表中的值是从另一个数据源中选择的,例如表格或视图,并且可以从中获得合适的排名,您可以单独应用,例如通过合适的'JOIN'和'ORDER BY'。 – HABO
感谢所有的答案。 – user123456