SQL:按顺序排序" IN"声明

时间:2015-07-03 08:31:45

标签: sql sql-server

基础数据:

请注意,这是所有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。

1 个答案:

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