我有一张包含以下格式的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
这甚至可能吗?我相信我需要使用递归查询,但似乎无法正确组合。
答案 0 :(得分:2)
您要做的是PIVOT
您的结果。 SQL Server支持PIVOT
命令,但我喜欢将MAX
与CASE
一起使用的可读性。这两个选项都假设您知道潜在列的数量。如果没有,您将需要考虑使用动态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