2017-06-08 18 views
0

入力から開始日と終了日を作成します。私は新しい列として開始日と終了日を追加して、出力が単一の日付欄

ID  | status | start_Date | end_date 
----------------------------------------- 
1/1/1900 | active | 20-10-2016 |9/11/2016    
1/1/1900 | removed | 9/11/2016 |99-99-9999 
1/2/1900 | active | 21-10-2016 |11/1/2017  
1/2/1900 | removed | 11/1/2017 |99-99-9999 

ようになっているはずたい

Id |Status |Modified_date 
----------------------------------------- 
1 |active |20-10-2016 
1 |removed |09-11-2016  
2 |active |21-10-2016  
2 |removed |11-01-2017 

せて頂きます

SELECT c.id, 
     c.[status], 
     c.[Modified_date] as [start_date], 
     COALESCE(t.[Modified_date],'99-99-9999') as end_date --or ISNULL 
FROM YourTable c 
OUTER APPLY (
    SELECT TOP 1 [Modified_date] 
    FROM YourTable 
    WHERE ID = c.ID AND [Modified_date] > c.[Modified_date] 
    ) as t 
0123:シンプル OUTER APPLYはことを行う必要があります
+1

私はあまり時間前よりも、まさにこのような状況のための答えを提供します。 https://stackoverflow.com/questions/44437174/merge-values-in-two-rows-in-an-sql-table-appear-in-two-columns-of-one-row/ –

+0

@SeanLange私はそれがだと思います今はちょっと違っていますが)あなたとは何か共通しています。 – Whencesoever

+1

終了日の9つすべてではなく、ここでNULLを使用する方がよいでしょう。すべての9とフォーマットの存在はまた、これらがvarcharカラムであるかどうか疑問に思う。その場合、**本当に**これをDateTimeの列に変換する必要があります。使用している形式では、日付を比較する点でSQLコードで正しく処理するのが非常に難しくなります。 –

答えて

0

これが可能である方法を知っています

出力:

id   status start_date end_date 
----------- ------- ---------- ---------- 
1   active 20-10-2016 09-11-2016 
1   removed 09-11-2016 99-99-9999 
2   active 21-10-2016 11-01-2017 
2   removed 11-01-2017 99-99-9999 

またはLEADを使用して(SQL Server 2012のから開始):

SELECT id, 
     [status], 
     [Modified_date] as [start_date], 
     LEAD([Modified_date],1,'99-99-9999') OVER (PARTITION BY Id ORDER BY [Modified_date] DESC) as end_date 
FROM YourTable 
+0

お返事ありがとうございました@ gofr1私はコードを試しましたが、残念ながら期待したとおりに動作しませんでした。なぜなら、予想以上にIDのレコードが増えているからです。以下は入力です患者ID | \tステータス| \tタイプ| \t Modified_date ----------------------------- |削除された\t | HHH \t | 08/07/2015 | HHH \t | | 2015年8月7日 |アクティブ\t |ナース\tをHHH \t | | 2018年8月7日を| \t削除| HHH \t | | 2017年8月7日 \t削除\t削除| 08/09/2016 |アクティブ\t |ベース\t | 09/09/2016 |削除されました\t | HHH \t | 08/06/2017 |削除されました\t | HHH \t | 08/07/2017 – Shafro

+0

あなたの質問を変更する必要があります。 :) – gofr1

+0

答えをチェックしてください! LEADの部分がうまくいき、OUTER APPLYの部分が固定されました。 – gofr1

関連する問題