SQL:按“中的顺序排序”;在;陈述 基础数据:
注意,这都是SQL Server 好的,那么基表将如下所示(称之为NameTable): 现在,我将运行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,因为它不一定是
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