2

我搜索了一下,找不到任何可以解决我的确切问题的东西

我有一个表(MSSQL),数据如下所示:

Source table:

RID    FullName FirstName   LastName    Email               Address
-------------------------------------------------------------------------------
1      NULL     [BOB]       NULL        NULL                NULL
1      NULL     NULL        [BOB]       NULL                NULL
1      NULL     NULL        NULL        [bob@bob.com]       NULL
2      NULL     [JAY]       NULL        NULL                NULL
2      NULL     NULL        [JAY]       NULL                NULL
2      NULL     NULL        NULL        [jerry@jerry.com]   NULL
3      NULL     [RICK]      NULL        NULL                NULL
3      NULL     NULL        [RICK]      NULL                NULL
3      NULL     NULL        NULL        [rick@rick.com]     NULL

但我需要将数据转换为如下所示:

Results table:

RID     FullName             Email                Address
---------------------------------------------------------
1       [BOB] [BOB]        [bob@bob.com]          NULL
2       [JAY] [JAY]        [jerry@jerry.com]      NULL
3       [RICK] [RICK]      [rick@rick.com]        NULL

注意: 如果源表中的 Fullname 为 NULL,那么我们结合 FirstName 和 LastName。(如果 FirstName 和 LastName 都为 NULL,那么我们只会得到 NULL FullName 结果,这完全没问题)。

提前感谢您对此的任何帮助!

4

2 回答 2

4

你需要一个group by

select rid, coalesce(max(FullName), max(FirstName)+' '+max(LastName)) as FullName,
       max(Email) as Email,
       max(Address) as Address
from t
group by rid
order by 1
于 2012-11-09T17:41:03.677 回答
3

这是一种方式,虽然有点复杂。我不知道您的完整数据集,但这应该为您提供所有可能的组合,以防每个 RID 有多个条目(例如,具有不同 FirstName 值的多行)。

SELECT a.RID, b.FirstName + ' ' + c.LastName AS FullName, d.Email
FROM myTable a
LEFT OUTER JOIN myTable b ON a.RID = b.RID AND b.FirstName IS NOT NULL
LEFT OUTER JOIN myTable c ON a.RID = c.RID AND c.LastName IS NOT NULL
LEFT OUTER JOIN myTable d ON a.RID = d.RID AND d.Email IS NOT NULL
GROUP BY a.RID, b.FirstName, c.LastName, d.Email

SQL 小提琴示例

于 2012-11-09T17:40:20.687 回答