1

私は以下のようなテーブルを持っています:

ID    Title    StartDate    EndDate
1     PromoA   2012-06-01   2012-08-01
2     PromoB   2011-01-01   2011-02-01
3     PromoC   2012-09-01   2012-10-01
4     PromoD   2012-07-01   2012-09-01

したがって、ステータス付きの 4 つのプロモーションがあります。1-OnGoing; 2-OutOfDate; 3-Waiting; 4-OnGoing

それらをステータスでソートする方法は?


問題は、classes.jar へのパスがシンボリックリンクされたフォルダーを使用していたことです。代わりに実際のフォルダーを使用しましたが、うまくいきました。

4

2 に答える 2

2
DECLARE @Table TABLE     
(    
     id int,  
     status varchar(20)  
)   

insert @table  
    SELECT  id,  
        CASE WHEN (EndDate < getdate()) THEN 'OutOfDate'  
             WHEN (StartDate > getdate()) THEN 'Waiting'  
             ELSE 'Ongoing'  
        END AS Status  
    FROM Promotion


SELECT *  
FROM Promotion p  
inner join @Table t on t.id = p.id  
ORDER BY Status
于 2012-07-20T06:29:56.050 に答える
1

次のように、CASE ステートメントを使用して各行を分類できます (これはStartDate <= EndDate、すべての行について次のことを前提としていることに注意してください。

;WITH cte AS
(
    SELECT ID, Title, StartDate, EndDate, 
        CASE WHEN (EndDate < CURRENT_TIMESTAMP) THEN 'OutOfDate' 
             WHEN (StartDate > CURRENT_TIMESTAMP) THEN 'Waiting' 
             ELSE 'Ongoing'
        END AS [Status]
    FROM Promotion
)
SELECT ID, Title, StartDate, EndDate
FROM cte
ORDER BY [Status]
于 2012-07-20T05:06:59.600 に答える