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 の場合、FullName の結果が NULL になるだけで、まったく問題ありません)。

これについて何か助けてくれてありがとう!

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

少し複雑ですが、これが1つの方法です。完全なデータセットはわかりませんが、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 に答える