请注意,这是所有SQL Server。
好的,所以基表看起来像这样(称之为NameTable):
ID | Name
___________________
1 | Randy
2 | Kenny
3 | Stan
4 | Kyle
5 | Cartman
现在我将运行一个SQL查询:
SELECT * FROM [NameTable] WHERE Name IN ("Kyle", "Stan", "Kenny", "Cartman", "Randy")
ID | Name
___________________
1 | Randy
2 | Kenny
3 | Stan
4 | Kyle
5 | Cartman
这是预期的。这很好,但我需要的是按照它们在IN语句中出现的顺序来排序数据。
所以在这种情况下: Kyle,Stan,Kenny,Cartman,Randy。
请特别注意,这不符合标准订单,因为它不一定按字母顺序排列
ID | Name
___________________
4 | Kyle
3 | Stan
2 | Kenny
5 | Cartman
1 | Randy
基本上IN子句中项目的顺序是我需要名字的顺序。
如何调整选择查询以实现此结果?它甚至可能吗?
PS:由于数据非常简单,我认为不需要sqlfiddle,但如果问题仍然不清楚,我会加一个吗?
此外,我还看到了其他一些帖子,但它们并非适用于SQL Server。
答案 0 :(得分:7)
您可以执行以下操作:
SELECT *
FROM dbo.NameTable
ORDER BY CASE WHEN Name = 'Kyle' THEN 1
WHEN Name = 'Stan' THEN 2
WHEN Name = 'Kenny' THEN 3
WHEN Name = 'Cartman' THEN 4
WHEN Name = 'Randy' THEN 5
ELSE 6 END ASC