sql - 第二列未在 sql 查询中排序,其中我按顺序使用 case 语句

标签 sql sql-server sql-order-by

下面的示例查询是我从 stackoverflow 获得的,这很有帮助。我正在使用相同的场景,并且已部分解决。

工作查询

SELECT * 
FROM Requirements
ORDER BY 
     CASE Day 
         WHEN 'Monday' THEN 1
         WHEN 'Tuesday' THEN 2
         WHEN 'Wednesday' THEN 3
         WHEN 'Thursday' THEN 4
         WHEN 'Friday' THEN 5
         WHEN 'Saturday' THEN 6
         WHEN 'Sunday' THEN 7
     END

我的查询输出如下,我的表有重复值,Monday1 在 Monday1 之后返回,但为什么 Tuesday1 在 Tuesday之前返回?

Monday
Monday1
Tuesday1
Tuesday
Wednesday
Wednesday1

我的包含两列值的表格如下所示:

Monday      Monday
Monday      Monday1
Wednesday   Wednesday
Wednesday   Wednesday1
Tuesday     Tuesday
Tuesday     Tuesday1

谢谢。

最佳答案

将包含 Monday1 等的列添加到 ORDER BY 语句中:

;WITH Requirements AS (
SELECT *
FROM (VALUES
('Monday','Monday'),
('Monday','Monday1'),
('Wednesday','Wednesday'),
('Wednesday','Wednesday1'),
('Tuesday','Tuesday'),
('Tuesday','Tuesday1')
) as t([day], col2)
)

SELECT * 
FROM Requirements
ORDER BY 
     CASE Day 
         WHEN 'Monday' THEN 1
         WHEN 'Tuesday' THEN 2
         WHEN 'Wednesday' THEN 3
         WHEN 'Thursday' THEN 4
         WHEN 'Friday' THEN 5
         WHEN 'Saturday' THEN 6
         WHEN 'Sunday' THEN 7
     END , col2

输出:

day         col2
Monday      Monday
Monday      Monday1
Tuesday     Tuesday
Tuesday     Tuesday1
Wednesday   Wednesday
Wednesday   Wednesday1

关于sql - 第二列未在 sql 查询中排序,其中我按顺序使用 case 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39013753/

相关文章:

mysql - 如何让MYSQL查询结果按ORDER BY条件排序?

sql - 查询以查找连续事件之间的时间差

mysql - 如何使用 SUM 和 GROUP BY 对行和所有行求和?

sql - 如果插入或更新期间发生更改,如何将数据转发到外部系统?使用触发器?使用扩展存储过程还是 CLR 集成?

mysql - 在 MySQL 中显示 MIN() 和 MAX() 值

sql-server - SQL Server - EBS存储设计

sql-server - 基于小时聚合时间数据

MySQL/MariaDB GROUP BY, ORDER BY 两次返回相同的结果

sql-server - 具有 IF 逻辑的 T-SQL 不适用于临时表

MongoDB 数据库,按一个字段排序,该字段是一个字符串字段,但其中有一个数字