2015-02-06 98 views
-10

我有以下一組數據。需要此查詢SQL Server

http://i57.tinypic.com/sn2y6a.jpg

而且我努力地在這個數據如下排序。

所以,下面是輸出數據。

http://i58.tinypic.com/xptth2.jpg

1)有一個新的列結束日期。計算方法如下: 如果StartDate有一個/重複記錄,則將其作爲StartDate,然後下一個最接近的日期應該是EndDate。對於下一行,這個EndDate應該作爲StartDate,而這個startdate的下一個應該是EndDate,它應該繼續這個ID。

2)對於ID 1,我有4條記錄。對於這個ID,如果FirstName有一條記錄,那麼應該選擇它,並且應該消除Null。對於LastName甚至MiddleName也是如此。

+0

其中一個鏈接是錯誤的? – 2015-02-06 19:20:10

+0

對不起詹姆斯。它現在正確...感謝您的幫助 – SQLquery 2015-02-06 19:27:07

+1

哎這個問題肯定看起來很熟悉... http://www.sqlservercentral.com/Forums/Topic1658378-23-1.aspx – 2015-02-06 19:37:38

回答

0

數據是這樣的格式,只有我可以想出這樣做的方式是使用遊標並將日期收集到表變量中,而將其他字段收集到正常變量中。當該行的開始日期早於先前行時,將收集的數據添加到另一個結果表變量中,並清除先前使用的變量並再次執行相同的操作。

0
select 
    ID, StartDate, 
    (select min(StartDate) from T as t2 where t2.ID = t1.ID and t2.StartDate > t1.StartDate) as EndDate, 
    (select max(FirstName) from T as t2 where t2.ID = t1.ID) as FirstName, 
    (select max(LastName) from T as t2 where t2.ID = t1.ID) as LastName, 
    (select max(MiddleName) from T as t2 where t2.ID = t1.ID) as MiddleNameName 
from T as t1 
group by ID, StartDate 

將T替換爲表格的名稱。您可能更願意使用CROSS APPLY來代替它。我正在使用MAX()做一些假設。

+0

這是一個不同的「肖恩」。 – shawnt00 2015-02-09 19:25:22