如何在SQL中按列(符合条件)排序?

时间:2012-02-03 10:43:07

标签: sql sql-server

我有两个不同的列作为DateTime类型:CREATION_DATE和UPDATE_DATE

我想创建一个SELECT(某些字段)语句,该列由(UPDATE_DATECREATION_DATE而不是两者)排序,其中UPDATE_DATE > CREATION_DATEUPDATE_DATE必须为{{ 1}}

为什么?任何项目都将在数据库中创建,NOT NULL将自动填充,但不会填充CREATION_DATE列。

当有人修改现有项目时,UPDATE_DATE将在每次修改时填写/更新,并将在UPDATE_DATE(ascendent)的UserInterface上列出。

怎么做?

对不起,如果我的问题不好......

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

这会将UPDATE_DATE列选为sort_date。但是,由于ISNULL功能,如果CREATION_DATEUPDATE_DATE,则会使用NULL列。

答案 2 :(得分:1)

使用isnull,如果UPDATE_DATE为空,则使用CREATION_DATE订购行。

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

详细了解isnull on MSDN

coalesce是另一种选择,它可以在大多数RDBMS(afaik)中运行。

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

答案 3 :(得分: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
相关问题