【问题标题】:2nd column not sorted in sql query where i use case statement in order by第二列未在 sql 查询中排序,我按顺序使用 case 语句
【发布时间】:2016-08-18 08:49:48
【问题描述】:

我从 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 是在星期二之前返回的呢?

Monday
Monday1
Tuesday1
Tuesday
Wednesday
Wednesday1

我的表有两列值如下所示:

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

谢谢。

【问题讨论】:

  • Tuesday1 和 Monday1 被您的 case 语句按顺序捕获,它们应该被评估为 null 并出现在顶部 - 尝试在 SELECT 中评估您的 CASE,然后您可以查看哪些值它得到例如SELECT *, CASE WHEN... 等等 ..END AS MySortOrder FROM...
  • 欢迎来到 Stack Overflow!由于您的问题不明确,您的问题可能会被否决/关闭。请考虑重新措辞以更清楚地说明您的要求。见How do I ask a good question?
  • 将原始列添加到 order by,类似于 ORDER BY CASE ... END, columnname

标签: sql sql-server sql-order-by


【解决方案1】:

将带有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

【讨论】:

    【解决方案2】:

    您只对第一列进行排序,第二列不涉及任何 ORDER BY,因此对于 column2 的排序方式没有规则。 Column1 按预期排序。如果您想要在星期一之后的 Monday1,请将 column2 添加为第二个 ORDER BY 参数

    【讨论】:

    • 我通过按您的帖子中提到的顺序添加第二列来解决它。谢谢大家。
    猜你喜欢
    • 2017-03-10
    • 1970-01-01
    • 2012-05-25
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    相关资源
    最近更新 更多