2015-02-06 5 views
-10

У меня есть следующий набор данных.Нужен этот запрос SQL Server

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

И я пытаюсь трудно сортировать эти данные, как показано ниже.

Итак, Ниже приведены выходные данные.

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

1) Существует новый столбец EndDate. Он рассчитывается как , если для StartDate есть одна/двойная запись, считать его StartDate, а следующая ближайшая дата должна быть EndDate. и для следующей строки этот EndDate должен быть как StartDate, а ближайшим для этой начальной даты должен быть EndDate, и он должен продолжить идентификатор.

2) Для ID 1 у меня 4 записи. Для этого идентификатора, если есть одна запись для FirstName, она должна быть выбрана и Null должен быть удален. И то же самое для LastName и даже MiddleName.

+0

Одна из ссылок неверна? –

+0

Жаль ДжеймсZ. Теперь это правильно ... Цените свою помощь – SQLquery

+1

Дайте этот вопрос уверенным знакомым ... http: //www.sqlservercentral.com/Forums/Topic1658378-23-1.aspx –

ответ

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

Смежные вопросы