0

我有一个包含 30,000 多条记录的表格,格式如下。

PK, AccountNo, OwnerFname, OwnerLname
1   1          John        Smith
2   1          Julie       Smith
3   2          Eric        Doe
4   2          Sara        Doe
5   3          Bill        Johnson
6   4          Don         Carlson
7   4          Donna       Carlson

我需要创建一个产生以下结果的查询。

AccountNo, OwnerFname, OwnerLname, Owner2Fname, Owner2Lname
1          John        Smith       Julie        Smith
2          Eric        Doe         Sara         Doe
3          Bill        Johnson
4          Don         Carlson     Donna        Carlson

这甚至可能吗?我相信我需要使用递归查询,但似乎无法正确组合。

4

1 回答 1

2

你想要做的是PIVOT你的结果。SQL Server 支持该命令,但我喜欢使用withPIVOT的可读性。这两个选项都假设您知道潜在列的数量。如果没有,您将需要考虑使用动态 SQL。MAXCASE

使用 Max/Case 方法——这使用了一个通用的表表达式并将ROW_NUMBER您的结果转为:

with cte as (
  select row_number() over (partition by accountno order by pk) rn,
    accountno, ownerfname, ownerlname
  from yourtable
  )
select 
  accountno, 
  max(case when rn = 1 then ownerfname end) OwnerFname,
  max(case when rn = 1 then ownerlname end) OwnerLname,
  max(case when rn = 2 then ownerfname end) OwnerFname2,
  max(case when rn = 2 then ownerlname end) OwnerLname2
from cte
group by accountno
于 2013-06-14T20:38:02.957 回答