Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:按“中的顺序排序”;在;陈述 基础数据:_Sql_Sql Server - Fatal编程技术网

SQL:按“中的顺序排序”;在;陈述 基础数据:

SQL:按“中的顺序排序”;在;陈述 基础数据:,sql,sql-server,Sql,Sql Server,注意,这都是SQL Server 好的,那么基表将如下所示(称之为NameTable): 现在,我将运行SQL查询: SELECT * FROM [NameTable] WHERE Name IN ("Kyle", "Stan", "Kenny", "Cartman", "Randy") 目前的结果是: 这是意料之中的。这很好,但我需要的是按照数据在in语句中出现的顺序对数据进行排序 所以在这种情况下:凯尔、斯坦、肯尼、卡特曼、兰迪。 请特别注意,这不适用于标准order by,因为它不一定是

注意,这都是SQL Server

好的,那么基表将如下所示(称之为NameTable):

现在,我将运行SQL查询:

SELECT * FROM [NameTable] WHERE Name IN ("Kyle", "Stan", "Kenny", "Cartman", "Randy")
目前的结果是: 这是意料之中的。这很好,但我需要的是按照数据在in语句中出现的顺序对数据进行排序

所以在这种情况下:凯尔、斯坦、肯尼、卡特曼、兰迪。

请特别注意,这不适用于标准order by,因为它不一定是按字母顺序排列的

所需结果: 问题: 基本上in子句中项目的顺序就是我需要名称的顺序

我应该如何调整select查询以实现此结果?有可能吗

PS:我认为没有必要使用sqlfiddle,因为数据非常直截了当,但如果问题仍然不清楚,我会添加sqlfiddle


我还看到了一些关于此的其他帖子,但它们不是针对SQL Server的。

您可以执行以下操作:

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

您可以添加orderid。
ID    |    Name
___________________
1     |    Randy
2     |    Kenny
3     |    Stan
4     |    Kyle
5     |    Cartman
 ID    |    Name
___________________
4     |    Kyle
3     |    Stan
2     |    Kenny
5     |    Cartman
1     |    Randy
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