2013-11-07 2 views
0

Работал над этим весь день и, похоже, не может добиться прогресса.
У меня есть данные, как это:Нужно объединить несколько строк в один, основанный на дате

MemberID Group   MemberStatusType ContactTask   Jan Assess Date  Jan RF Score Jan PF Score Feb Assess Date  Feb RF Score Feb PF Score Mar Assess Date  Mar RF Score Mar PF Score 
5213  MSO    Engaged X   Follow Up Contact 1/31/2012   1    4    NULL      NULL   NULL   NULL   NULL   NULL 
5213  MSO    Engaged X   Follow Up Contact NULL    NULL   NULL   2/29/2012     2     2   NULL   NULL   NULL 
5213  MSO    Engaged X   Follow Up Contact NULL    NULL   NULL   NULL      NULL   NULL  3/21/2012   5    4 

Я пытаюсь закончить с собой данные, как это:

MemberID Group MemberStatusType ContactTask   Jan Assess Date  Jan RF Score  Jan PF Score  Feb Assess Date  Feb RF Score Feb PF Score Mar Assess Date  Mar RF Score  Mar PF Score 
5213  MSO   Engaged X  Follow Up Contact 1/31/2012    1     4    2/29/2012    2    2   3/21/2012    5     4 

Я экспериментировал с PIVOT, но я не хотел результатов, потому что я не нужно ничего собирать. Мне просто нужно взять данные из нескольких строк и сделать все это в одной строке. Я также видел несколько примеров таких действий на этом сайте, но я не мог заставить эти вещи работать, или некоторые из них были для oracle или mysql, и я не знал, как перевести на MS SQL.

+1

Вы говорите, что вам не нужно ничего собирать, но вот что это такое. –

ответ

2

Вы можете сделать это с помощью агрегации:

select MemberId, Group, MemberStatusType, ContactTask, 
     max([Jan Assess Date]) as [Jan Assess Date], 
     . . . 
from t 
group by MemberId, Group, MemberStatusType, ContactTask; 

max() функция будет служить, чтобы вернуть ненулевое значение (если таковые имеются) между рядами.

+0

Это не сработало. Это сделало вывод, что результат выглядит так, как у меня в таблице, в которой я начал, только Jan находится в нижней строке, а март - в верхней строке. Просто перевернул результаты. – Baub

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