2012-02-03 1 views
1

나는 날짜 시간 유형으로 두 개의 서로 다른 열이 : 나는 UPDATE_DATE이어야합니다 UPDATE_DATE > CREATION_DATE과 열을 기준으로 어떤 순서로 (UPDATE_DATE 또는 CREATION_DATE 둘 다)를 SELECT (일부 필드) 문을 생성 할 CREATION_DATE 및 UPDATE_DATESQL에서 열 (기준과 일치하는)로 주문하는 방법은 무엇입니까?

NOT NULL

왜? 모든 항목은 DB에 생성되며 CREATION_DATE은 자동으로 채워지지만 UPDATE_DATE 열은 채워지지 않습니다.

누군가 기존 항목을 수정하면 UPDATE_DATE이 수정 될 때마다 채워지거나 업데이트되고 UPDATE_DATE (오름차순)까지 UserInterface에 나열됩니다.

어떻게 수행하나요? 죄송합니다

내 질문이 나쁜 경우 ...

+0

질문은 일반적인 질문입니다. 코드가 필요하지 않습니다. 몇 가지 예가 필요했습니다. –

답변

1

이 null 인 경우 을 사용하면 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 
1
select 
    * 
from 
(
    SELECT 
     your_columns, 
     ISNULL(UPDATE_DATE, CREATION_DATE) as sort_date 
    FROM 
     .... 
) 
order by 
    sort_date 

이것은 sort_dateUPDATE_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, 나를 하하보다 빠르다 –

+0

그래, 너는 빠르다 야. – Arion

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 
관련 문제