Declare @Donor Table
(
DonorID int,
Donor Varchar(10),
Name Varchar(10)
)
Insert into @Donor
Select 1234,'Jane','Doe' union all
Select 5678,'Mike','Brown' union all
Select 9012,'Mary','Smith'
Declare @Pledge Table
(
Donor int,
Pledge decimal(10,2),
PledgeDate Datetime
)
Insert into @Pledge
Select 1234,20.00,'1/20/2012' union all
Select 5678,50.00,'2/3/2012' union all
Select 5678,50.00,'3/3/2012' union all
Select 9012,100.00,'1/1/2012' union all
Select 9012,45.00,'5/10/2012' union all
Select 9012,5.00,'12/31/2012'
Select
DonorId,Donor,Name,
max([1_Pledge]) as Pledge1_Amt ,
max([1_PledgeDate]) as Pledge1_Date,
max([2_Pledge]) as Pledge2_Amt ,
max([2_PledgeDate]) as Pledge2_Date,
max([3_Pledge]) as Pledge3_Amt,
max([3_PledgeDate]) as Pledge3_Date
from
(
Select D.DonorId,D.Donor,D.Name,Pledge,PledgeDate,
Cast(ROW_NUMBER() OVER (PARTITION by D.DonorId order by Pledge desc) as varchar(2)) + '_Pledge' as ThatFieldSequence,
Cast(ROW_NUMBER() OVER (PARTITION by D.DonorId order by Pledge) as varchar(2)) + '_PledgeDate' as ThatOtherFieldSequence
from @Donor D
inner join @Pledge P on D.DonorId = P.Donor
) a
pivot (
max(Pledge) for ThatFieldSequence in ([1_Pledge], [2_Pledge], [3_Pledge])
) p1
pivot (
max(PledgeDate) for ThatOtherFieldSequence in ([1_PledgeDate], [2_PledgeDate], [3_PledgeDate])
) p2
group by
DonorId,Donor,Name
DonorId Donor Name Pledge1_Amt Pledge1_Date Pledge2_Amt Pledge2_Date Pledge3_Amt Pledge3_Date
1234 Jane Doe 20.00 2012-01-20 00:00:00.000 NULL NULL NULL NULL
5678 Mike Brown 50.00 2012-02-03 00:00:00.000 50.00 2012-03-03 00:00:00.000 NULL NULL
9012 Mary Smith 100.00 2012-12-31 00:00:00.000 45.00 2012-05-10 00:00:00.000 5.00 2012-01-01 00:00:00.000