2012-08-17 55 views
1

我读ORDER BY conditionHow to add condition in 'order by'?但这些不能解答我的问题。按两个DATETIME列的条件排序

我有2个日期时间列名为CREATION_DATEUPDATE_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运营商?

谢谢

+0

嗯,如果创建日期=更新日期,那么这是为什么不等同于只是更新日期排序? – 2012-08-17 08:39:44

+0

急速使浪费:) – 2012-08-17 08:43:43

回答

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。所以只是按顺序排列。这是相同的。

+0

当然,你说得对。 – 2012-08-17 08:35:54

0

尝试

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

在C++/JAVA/C# '类比',该SQL语句Case可以同时用作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