1

我阅读了ORDER BY 条件如何在“order by”中添加条件?但这些不能回答我的问题。

我有 2 个名为CREATION_DATE和的日期时间列UPDATE_DATE

我想按以下方式排序(使用ORDER BY子句):

  • CREATION_DATE如果CREATION_DATE = UPDATE_DATE

    或者

  • UPDATE_DATE在其他情况下。

我写

SELECT * FROM Table1
ORDER BY
CASE Table1.CREATION_DATE
    WHEN Table1.CREATION_DATE = Table1.UPDATE_DATE THEN Table1.CREATION_DATE
    ELSE Table1.UPDATE_DATE
END ASC

但它不起作用,我在=符号处收到错误。

我尝试使用其他运算符...当然,我犯了错误,但我不知道在WHEN语句中使用运算符是否正确。

不接受运营商WHEN吗?

谢谢

4

4 回答 4

6

尝试

ORDER BY
CASE WHEN Table1.CREATION_DATE = Table1.UPDATE_DATE
     THEN Table1.CREATION_DATE
     ELSE Table1.UPDATE_DATE
END ASC

或更简单

ORDER BY Table1.UPDATE_DATE ASC

UPDATE_DATE因为只有当它等于 时,您才想订购CREATION_DATE。在这种情况下,您也可以订购UPDATE_DATE。在其他情况下,您希望按UPDATE_DATE. 所以只能按那个顺序。这是相同的。

于 2012-08-17T08:31:59.230 回答
0

尝试

ORDER BY UPDATE_DATE, CREATION_DATE
于 2012-08-17T08:32:04.313 回答
0
SELECT * FROM Table1
ORDER BY
CASE 
    WHEN Table1.CREATION_DATE = Table1.UPDATE_DATE THEN Table1.CREATION_DATE
    ELSE Table1.UPDATE_DATE
END ASC
于 2012-08-17T08:32:22.753 回答
0

在 C++/java/C#“类比”中,SQLCase语句既可以用作 a switch(),也可以用作if / elseif / if构造。

例如,以下两项都是合法的:

declare @flag bit
set @flag = 0
select case 
    when @flag = 1
        then '1 selected'
    else
        '0 selected'
    end

declare @flag bit
set @flag = 0
select case @flag
    when 1
        then '1 selected'
    else
        '0 selected'
    end
于 2012-08-17T08:38:09.047 回答