2012-02-03 48 views
1

我有兩個不同的列DateTime類型:CREATION_DATE和UPDATE_DATE如何按SQL中的列(與條件匹配)進行排序?

我想創建一個SELECT(某些字段)語句由列其順序(UPDATE_DATECREATION_DATE不是兩個),其中UPDATE_DATE > CREATION_DATEUPDATE_DATE必須NOT NULL

爲什麼?任何項目將創建在DB和CREATION_DATE將自動填充,但不是UPDATE_DATE列。

當有人修改現有項目時,將在每次修改時填寫/更新UPDATE_DATE,並且將按UPDATE_DATE(ascendent)在UserInterface上列出。

如何做到這一點?

很抱歉,如果我的問題是壞...

+0

這個問題是一般的問題。無需代碼。我需要一些例子。 – 2012-02-03 10:54:03

回答

1

使用isnull,如果UPDATE_DATE爲空,則使用CREATION_DATE來排序行。

select * 
from table 
order by isnull(UPDATE_DATE, CREATION_DATE) asc 

查看更多about isnull on MSDN

coalesce是一種選擇,它將在大多數RDBMS(afaik)中工作。

select * 
from table 
order by coalesce(UPDATE_DATE, CREATION_DATE) asc 
1
select 
    * 
from 
(
    SELECT 
     your_columns, 
     ISNULL(UPDATE_DATE, CREATION_DATE) as sort_date 
    FROM 
     .... 
) 
order by 
    sort_date 

這將選擇UPDATE_DATEsort_date。但是,由於ISNULL函數,如果UPDATE_DATENULL,則會使用CREATION_DATE列。

3

事情是這樣的:

DECLARE @tbl TABLE(UPDATE_DATE DATETIME,CREATION_DATE DATETIME) 
INSERT INTO @tbl 
SELECT '2011-01-01','2011-02-01' 
UNION ALL 
SELECT '2012-01-01','2011-12-10' 

SELECT 
    * 
FROM 
    @tbl AS tbl 
ORDER BY 
    (
    CASE WHEN tbl.UPDATE_DATE>tbl.CREATION_DATE 
     THEN tbl.UPDATE_DATE 
     ELSE tbl.CREATION_DATE 
    END) ASC 
+0

+1,比我快哈哈 – 2012-02-03 10:54:07

+0

是的,你必須快哈哈 – Arion 2012-02-03 10:54:48

0

另一種選擇是將其添加CASE列和秩序。我更喜歡這個解決方案,因爲它不使用子查詢

select 
CASE 
    WHEN UPDATE_DATE > CREATION_DATE THEN UPDATE_DATE 
    else CREATION_DATE 
END as MyOrderDate 
, * 
from fund_datasource_feed 
order by MyOrderDate 
相關問題