根据唯一帐号组合记录

时间:2013-06-14 20:13:25

标签: sql recursion sql-server-2008-r2

我有一张包含以下格式的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

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

1 个答案:

答案 0 :(得分:2)

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

使用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