Kristian_dk Ответов: 2

Получить результат SQL запроса horisontal


Всем привет,
Мне нужно, чтобы helt открепил результат моего SQL-запроса.
Я считаю переадресации из моей системы входа в систему в разные приложения, и все мои подсчеты сгруппированы по вертикали. Как получить результат, горизонтально сгруппированный по каждому приложению?

Я хочу получить такой результат
Приложения App1: Приложения App2: App3
4: 7: 8

Я получаю это

Приложения app1
4
7
8

Im на SQL server 2014

Что я уже пробовал:

(Выберите COUNT (REDIRTO) как App1
От глобаллогина.Журнал событий
Где (LOGONAS = 'my@email.com') и REDIRTO типа ' %AppName1%'
)
СОЮЗ
(
Выберите COUNT (REDIRTO) как App2
От глобаллогина.Журнал событий
Где (LOGONAS = 'my@email.com') и REDIRTO как ' %AppName2%'
)
СОЮЗ
(
Выберите COUNT (REDIRTO) как App3
От глобаллогина.Журнал событий
Где (LOGONAS = 'my@email.com') и REDIRTO как ' %AppName3%'
)

2 Ответов

Рейтинг:
12

jamuro77

Привет Кристиан,

Я не знаю, хорошо ли я понял, но я бы сказал, что вы хотите сделать что-то подобное:

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


Если это так (если нет, дайте мне знать или уточните, пожалуйста), вы можете попробовать простое решение относительно вашего собственного кода, аналогичное:

;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


Надеюсь, это вам пригодится!

Во всяком случае, мне не понравилось так много операторов "UNION" в общем табличном выражении, позже я пришлю вам новое решение, более оптимизированное.


Kristian_dk

привет Jamuro77
Большое спасибо!! Это решение сделало свое дело.
Ужасно
/ Кристиан

jamuro77

Счастливый код был полезен для вас!
Если вы хотите узнать немного больше об этом, вы можете посмотреть и оценить статью, которую я написал несколько дней назад: "использование PIVOT с SQL Server"

Рейтинг:
1

jamuro77

Другим решением может быть:

;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