需要根据日期将多行合并为一行

时间:2013-11-07 23:51:44

标签: sql sql-server-2008 tsql

整天都在工作,似乎无法取得任何进展 我有这样的数据:

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 个答案:

答案 0 :(得分:2)

您可以使用聚合执行此操作:

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

max()函数将用于返回行中的非空值(如果有)。