Click here to Skip to main content
15,919,245 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hello everyone,
I need helt to UNPIVOT my SQL Query result.
I am counting redirects from my login system to different applications and all my counts are grouped vertically. How do i get the result horisontally grouped by each application?

I Want a result like this
App1: App2: App3
4: 7: 8

Im getting this

App1
4
7
8

Im on SQL server 2014

What I have tried:

(SELECT COUNT(REDIRTO) AS App1
FROM globallogin.Eventlog
WHERE (LOGONAS = 'my@email.com') AND REDIRTO LIKE '%AppName1%'
)
UNION
(
SELECT COUNT(REDIRTO) AS App2
FROM globallogin.Eventlog
WHERE (LOGONAS = 'my@email.com') AND REDIRTO LIKE '%AppName2%'
)
UNION
(
SELECT COUNT(REDIRTO) AS App3
FROM globallogin.Eventlog
WHERE (LOGONAS = 'my@email.com') AND REDIRTO LIKE '%AppName3%'
)
Posted
Updated 25-Nov-16 23:13pm

Hello Kristian,

I don't know if I have understood well but I would say that you want to do something like this:

SQL
declare @Demo table (App nvarchar(20), Num int)

insert into @Demo(App, Num)
values('App1',20),('App2',30),('App3',40)

select * from @Demo
pivot (sum(Num) for App in (App1,App2,App3)) as Result


If so (if not, let me know or clarify please) , you can try a simple solution regarding your own code similar to:

SQL
;with cte as 
((SELECT 'AppName1' as App, COUNT(REDIRTO) AS AppCount
FROM globallogin.Eventlog
WHERE (LOGONAS = 'my@email.com') AND REDIRTO LIKE '%AppName1%'
)
UNION
(
SELECT 'AppName2' as App, COUNT(REDIRTO) AS AppCount
FROM globallogin.Eventlog
WHERE (LOGONAS = 'my@email.com') AND REDIRTO LIKE '%AppName2%'
)
UNION
(
SELECT 'AppName3' as App, COUNT(REDIRTO) AS AppCount
FROM globallogin.Eventlog
WHERE (LOGONAS = 'my@email.com') AND REDIRTO LIKE '%AppName3%'
))
select * from cte
pivot (sum(AppCount) for App in (AppName1,AppName2,AppName3)) as FinalResult


I hope this is useful for you!

Anyway I didn't like so many 'UNION' operator in the Common Table Expression, later on I'll send you a new solution more optimized.
 
Share this answer
 
Comments
Kristian_dk 27-Nov-16 1:34am    
hi Jamuro77
Thank you very much!! This solution did the trick.
Awsome
/Kristian
jamuro77 27-Nov-16 4:24am    
Happy the code has been useful for you!
If you want to know a little more about this you can have a look and rate an article that I wrote some days ago, "Using PIVOT with SQL Server"
Another solution could be:

SQL
;with cte as 
((SELECT (case when REDIRTO like '%AppName1%' then 'AppName1'
			 when REDIRTO like '%AppName2%' then 'AppName2' 
			 when REDIRTO like '%AppName3%' then 'AppName3'	
		  end) as App, 
	COUNT(*) AS AppCount
FROM globallogin.Eventlog
WHERE (LOGONAS = 'my@email.com') AND REDIRTO LIKE '%AppName[123]%' /* Note regular expression here*/
group by (case when REDIRTO like '%AppName1%' then 'AppName1'
			 when REDIRTO like '%AppName2%' then 'AppName2' 
			 when REDIRTO like '%AppName3%' then 'AppName3'	
		  end)
)
)
select * from cte
pivot (sum(AppCount) for App in (AppName1,AppName2,AppName3)) as FinalResult
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900