2012-08-17 51 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