rwheeler23
asked on
Pivot SQL Query
This query list each contributor by year. What I would like is to see
Contributor Year 1 Year 2 Year 3 Year 4
For example:
Contributor Year 1 Year 2 Year 3 Year 4
100 $100 $200 $300 $400
200 $50 $100 $150 $200
SELECT year(t2.date) as YearContrib,t2.MemberNumbe rId,sum(co alesce([Am ount],0)) as Amount
FROM [Contribution Details] t1
inner join [Contribution Headers] t2 on t1.ContribHeaderId=t2.Cont ribNumberI d
group by t2.MemberNumberId,year(t2. date)
order by MemberNumberId,year(t2.dat e)
How do I restructure this query to accomplish this? I am using SQL Server 2012
Contributor Year 1 Year 2 Year 3 Year 4
For example:
Contributor Year 1 Year 2 Year 3 Year 4
100 $100 $200 $300 $400
200 $50 $100 $150 $200
SELECT year(t2.date) as YearContrib,t2.MemberNumbe
FROM [Contribution Details] t1
inner join [Contribution Headers] t2 on t1.ContribHeaderId=t2.Cont
group by t2.MemberNumberId,year(t2.
order by MemberNumberId,year(t2.dat
How do I restructure this query to accomplish this? I am using SQL Server 2012
ASKER
The query give me this message:
Msg 156, Level 15, State 1, Line 13
Incorrect syntax near the keyword 'PIVOT'.
And the second one gives me:
Msg 156, Level 15, State 1, Line 28
Incorrect syntax near the keyword 'FROM'.
Msg 156, Level 15, State 1, Line 32
Incorrect syntax near the keyword 'PIVOT'.
Msg 156, Level 15, State 1, Line 13
Incorrect syntax near the keyword 'PIVOT'.
And the second one gives me:
Msg 156, Level 15, State 1, Line 28
Incorrect syntax near the keyword 'FROM'.
Msg 156, Level 15, State 1, Line 32
Incorrect syntax near the keyword 'PIVOT'.
check this out
;with C AS
(
SELECT year(t2.date) as YearContrib,t2.MemberNumberId,sum(coalesce([Amount],0)) as Amount
FROM [Contribution Details] t1
inner join [Contribution Headers] t2 on t1.ContribHeaderId=t2.ContribNumberId
group by t2.MemberNumberId,year(t2.date)
)
select MemberNumID as contributerID,[2009],[2010],[2011],[2012]
FROM
(
SELECT * FROM C
) as p
PIVOT
(
SUM(Amount) FOR MemberNumID IN ([2009],[2010],[2011],[2012])
) as pvt
order by 1
ASKER
Now I get these:
Msg 207, Level 16, State 1, Line 15
Invalid column name 'MemberNumID'.
Msg 207, Level 16, State 1, Line 8
Invalid column name 'MemberNumID'.
Msg 207, Level 16, State 1, Line 15
Invalid column name 'MemberNumID'.
Msg 207, Level 16, State 1, Line 8
Invalid column name 'MemberNumID'.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
This is brilliant. Thank you so much. I have seen this construct before but never fully understood it.
May I asked what does the
;with C AS
do?
May I asked what does the
;with C AS
do?
it is called Common Table Expression, commonly abbreviated as CTE's... they can be used in various number of places...
ASKER
Thank you so very much! Very clear and concise solution and follow up was excellent.
Open in new window
incase if the number of years are dynamic and you don't know what they will be then you have to use a dynamic PIVOT as we do below
Open in new window