入力から開始日と終了日を作成します。私は新しい列として開始日と終了日を追加して、出力が単一の日付欄
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はことを行う必要があります
私はあまり時間前よりも、まさにこのような状況のための答えを提供します。 https://stackoverflow.com/questions/44437174/merge-values-in-two-rows-in-an-sql-table-appear-in-two-columns-of-one-row/ –
@SeanLange私はそれがだと思います今はちょっと違っていますが)あなたとは何か共通しています。 – Whencesoever
終了日の9つすべてではなく、ここでNULLを使用する方がよいでしょう。すべての9とフォーマットの存在はまた、これらがvarcharカラムであるかどうか疑問に思う。その場合、**本当に**これをDateTimeの列に変換する必要があります。使用している形式では、日付を比較する点でSQLコードで正しく処理するのが非常に難しくなります。 –