SQL Select Pivot?

I have a table with the following phone call data fro our sales team

CallDTTM                                              Minutes
2013-06-10 00:23:30.000                        21
etc...



What I want to get is the calls by hour total minutes

CallDate          00AM    01AM    02AM   etc...
06/10/2013       123        251      14
Larry Bristersr. DeveloperAsked:
Who is Participating?
 
Louis01Connect With a Mentor Commented:
declare @CallsTable table(CallDTTM datetime, [Minutes] int);
insert into @CallsTable values ('2013-06-10 00:23:30.000', 1);
insert into @CallsTable values ('2013-06-10 00:24:30.000', 10);
insert into @CallsTable values ('2013-06-10 10:23:30.000', 2);
insert into @CallsTable values ('2013-06-10 12:23:30.000', 3);
insert into @CallsTable values ('2013-06-10 14:23:30.000', 4);
insert into @CallsTable values ('2013-06-11 00:23:30.000', 1);
insert into @CallsTable values ('2013-06-11 10:23:30.000', 2);
insert into @CallsTable values ('2013-06-11 12:23:30.000', 3);
insert into @CallsTable values ('2013-06-11 14:23:30.000', 4);


select CallDate	
	 , [0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23]
  from (select replace(left(CONVERT(varchar, t1.CallDTTM, 13), 11), ' ', '-') as CallDate
			 , datepart(hour,t1.CallDTTM) as HourFrom
			 , t1.[Minutes] 
		  from @CallsTable t1
		) p1
 PIVOT (SUM([Minutes])
		FOR HourFrom in ([0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23])
	   ) as pt1	

Open in new window

0
 
gt2847cConnect With a Mentor Sr. Security ConsultantCommented:
This doesn't use the PIVOT keyword, but accomplishes the same thing.  I tend to like this format better as it is more portable between server versions...

SELECT CONVERT(VARCHAR, [CallDTTM], 110) AS [CallDate]
	, ISNULL(SUM(CASE WHEN DATEPART(hour,[CallDTTM]) = 0 THEN [Minutes] END), 0) AS [00AM]
	, ISNULL(SUM(CASE WHEN DATEPART(hour,[CallDTTM]) = 1 THEN [Minutes] END), 0) AS [01AM]
	, ISNULL(SUM(CASE WHEN DATEPART(hour,[CallDTTM]) = 2 THEN [Minutes] END), 0) AS [02AM]
	, ISNULL(SUM(CASE WHEN DATEPART(hour,[CallDTTM]) = 3 THEN [Minutes] END),  0)AS [03AM]
	-- 4-21 skipped for brevity
	, ISNULL(SUM(CASE WHEN DATEPART(hour,[CallDTTM]) = 22 THEN [Minutes] END), 0) AS [10PM]
	, ISNULL(SUM(CASE WHEN DATEPART(hour,[CallDTTM]) = 23 THEN [Minutes] END), 0) AS [11PM]
FROM [MyTable]
GROUP BY CONVERT(VARCHAR, [CallDTTM], 110)
ORDER BY CONVERT(VARCHAR, [CallDTTM], 110)         

Open in new window



Gives output like this:
CallDate	00AM	01AM	02AM	03AM	10PM	11PM
06-09-2013	0	0	0	15	0	0
06-10-2013	21	10	0	0	0	0

Open in new window

0
 
plusone3055Commented:
SELECT CALLDATE, HOUR,  SUM(MINUTES) /60   -- For hours
GROUP BY CALLDATE
0
Cloud Class® Course: SQL Server Core 2016

This course will introduce you to SQL Server Core 2016, as well as teach you about SSMS, data tools, installation, server configuration, using Management Studio, and writing and executing queries.

 
Larry Bristersr. DeveloperAuthor Commented:
Away from my DEV PC.  Will test when I get back
0
 
Larry Bristersr. DeveloperAuthor Commented:
I would like to split points between gt2847c and Louis01

Any violent objections?

Both viable solutions and Louis01 answered with PIVOT even though a minute or so later
0
 
gt2847cSr. Security ConsultantCommented:
No complaints here
0
 
Louis01Commented:
Fine by me
0
 
Larry Bristersr. DeveloperAuthor Commented:
Perfect guys.
Thanks
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.