Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
Solved

# SQL Pivot

Posted on 2013-05-21
Medium Priority
416 Views
Last Modified: 2013-05-21
Sharath provided me a Pivot Solution at This Link

But I'm struggling to get this to pivot for me.

Basically I need the totals by state columns

Right now, this select
``````SELECT	HT.[YR],
A.[Specialty],
A.[Lead ID],
A.[Client State] AS ClientState,
HT.[HRS]
FROM	[dbo].[Assignment] A
INNER JOIN
(
SELECT	[Assignment Number], SUM(ISNULL(H.[Hours],0) + ISNULL(H.[On Call Hours],0)) HRS, YEAR(H.[Week Ending Date]) AS [YR]
FROM	[dbo].[HoursTracking] H
GROUP BY
[Assignment Number] ,YEAR(H.[Week Ending Date])
) HT
ON	A.[Assignment Number] = HT.[Assignment Number]
WHERE	HT.HRS > 0 AND A.[Lead ID] IS NOT NULL
ORDER BY A.[Client State],A.[Specialty],  HT.[YR] DESC
``````

Produces this

What I need to see is this
The states are the sum of that state for that specialty and that year
Of course there will be all the states.
0
Question by:lrbrister
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• Learn & ask questions
2 Comments

LVL 41

Accepted Solution

Sharath earned 2000 total points
ID: 39185614
can you try this?
``````declare @select varchar(max)
select @select = STUFF((select distinct ',' + quotename(StateName, '')
from States
for XML PATH('')
),1,1,'' )

select @select = 'select YR,Specialty,'+@select+
' from (
SELECT	HT.[YR],
A.[Specialty],
A.[Lead ID],
A.[Client State] AS ClientState,
HT.[HRS]
FROM	[dbo].[Assignment] A
INNER JOIN
(
SELECT	[Assignment Number], SUM(ISNULL(H.[Hours],0) + ISNULL(H.[On Call Hours],0)) HRS, YEAR(H.[Week Ending Date]) AS [YR]
FROM	[dbo].[HoursTracking] H
GROUP BY
[Assignment Number] ,YEAR(H.[Week Ending Date])
) HT
ON	A.[Assignment Number] = HT.[Assignment Number]
WHERE	HT.HRS > 0 AND A.[Lead ID] IS NOT NULL) t1
pivot (sum(HRS) for ClientState in ('+@select+')) p'
exec(@select)
``````
0

Author Closing Comment

ID: 39185639
Excellent! Thanks

That's much better that what I manually came up with

SELECT [YR],[Specialty], [AK],[AL],[AR],[AZ],[CA],[CO],[CT],[DC],[DE],[FL],[GA],[HI],[IA],[ID],[IL],[IN],[KS],[KY],[LA],[MA],[MD],[ME],[MI],[MN],[MO],[MS],[MT],[NC],[ND],[NE],[NH],[NJ],[NM],[NV],[NY],[OH],[OK],[OR],[PA],[RI],[SC],[SD],[TN],[TX],[UT],[VA],[VI],[VT],[WA],[WI],[WV],[WY]
FROM
(
SELECT      HT.[YR],
A.[Specialty],
A.[Lead ID],
A.[Client State] AS ClientState,
HT.[HRS]
FROM      [dbo].[Assignment] A
INNER JOIN
(
SELECT      [Assignment Number], SUM(ISNULL(H.[Hours],0) + ISNULL(H.[On Call Hours],0)) HRS, YEAR(H.[Week Ending Date]) AS [YR]
FROM      [dbo].[HoursTracking] H
GROUP BY
[Assignment Number] ,YEAR(H.[Week Ending Date])
) HT
ON      A.[Assignment Number] = HT.[Assignment Number]
WHERE      HT.HRS > 0 AND A.[Lead ID] IS NOT NULL
) p
PIVOT
(
SUM(P.[HRS])
FOR P.ClientState IN ([AK],[AL],[AR],[AZ],[CA],[CO],[CT],[DC],[DE],[FL],[GA],[HI],[IA],[ID],[IL],[IN],[KS],[KY],[LA],[MA],[MD],[ME],[MI],[MN],[MO],[MS],[MT],[NC],[ND],[NE],[NH],[NJ],[NM],[NV],[NY],[OH],[OK],[OR],[PA],[RI],[SC],[SD],[TN],[TX],[UT],[VA],[VI],[VT],[WA],[WI],[WV],[WY])
) AS myPIVOT

GROUP BY [YR],[Specialty]
ORDER BY [YR],[Specialty]
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Ever needed a SQL 2008 Database replicated/mirrored/log shipped on another server but you can't take the downtime inflicted by initial snapshot or disconnect while T-logs are restored or mirror applied? You can use SQL Server Initialize from Backup…
I have a large data set and a SSIS package. How can I load this file in multi threading?
Via a live example combined with referencing Books Online, show some of the information that can be extracted from the Catalog Views in SQL Server.
Using examples as well as descriptions, and references to Books Online, show the documentation available for datatypes, explain the available data types and show how data can be passed into and out of variables.
###### Suggested Courses
Course of the Month7 days, 10 hours left to enroll

#### 715 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.