2012-02-03 3 views
1

У меня есть две разные колонки, как тип DateTime: CREATION_DATE и UPDATE_DATEКак заказать по столбцу (который соответствует критериям) в SQL?

Я хочу создать SELECT (некоторые поля) заявление, в котором порядок в колонке (UPDATE_DATE или CREATION_DATE не оба), где UPDATE_DATE > CREATION_DATE и UPDATE_DATE должны быть NOT NULL

Почему? Любые предметы будут создаваться в БД, а CREATION_DATE будет заполняться автоматически, но не UPDATE_DATE.

Если кто-то модифицирует существующий элемент, то UPDATE_DATE будет заполнен/обновлен при каждой модификации и будет указан на UserInterface с помощью UPDATE_DATE (ascendent).

Как это сделать?

Извините, если мой вопрос плохо ...

+0

Вопрос общий. Не требуется код. Мне нужны были примеры. –

ответ

1

Используйте isnull, если UPDATE_DATE имеет значение null, он использует CREATION_DATE для заказа строк.

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

Подробнее о isnull on MSDN.

coalesce является альтернативой, и он будет работать в большинстве СУРБД (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_DATE столбец как sort_date. Однако из-за функции ISNULL вместо CREATION_DATE используется столбец UPDATE_DATE - NULL.

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, быстрее меня ха-ха –

+0

Да, вам нужно быть быстрым ха-ха – Arion

0

другой вариант, чтобы добавить столбец СЛУЧАЙ и порядок им. Мне нравится это решение лучше, потому что оно не использует подзапросы

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