я могу узнать уникальные решатели инцидентов в месяц? - PullRequest
0 голосов
/ 09 ноября 2018

Я создал скрипт, который показывает, сколько уникальных людей разрешало звонки в команде в месяц, используя скрипт ниже.

Есть ли способ узнать, кто эти люди, но все равно отображать ежемесячные данные по каждой команде на основе сценария, который у меня уже работает?

SELECT CAST(DATEPART(year, stat_datetimeresolved) as varchar(4)) + '-' + RIGHT('0' + CAST(DATEPART(month, stat_datetimeresolved) as varchar(2)), 2) as MonthResolved, ResolvedByTeam, COUNT(DISTINCT resolvedby) as ResolvedByCnt
FROM [dbo].[Incident]
WHERE stat_datetimeresolved >= '20170401'
GROUP BY CAST(DATEPART(year, stat_datetimeresolved) as varchar(4)) + '-' + RIGHT('0' + CAST(DATEPART(month, stat_datetimeresolved) as varchar(2)), 2), ResolvedByTeam
ORDER BY MonthResolved asc, ResolvedByTeam

1 Ответ

0 голосов
/ 09 ноября 2018

У вас есть два варианта

  1. Чтобы расширить свой результат и вернуть отдельную строку для каждой уникальной комбинации MonthResolved, ResolvedByTeam и resolvedby.Это вернет больше строк, чем ваш исходный запрос, потому что в комбинации «один месяц / команда» вы получите столько строк, сколько преобразователей.
  2. Чтобы добавить еще один столбец к вашему запросу, в котором будет возвращен список (например,через запятую) с именами распознавателей.Это легко сделать с помощью функции STRING_AGG , но она доступна только в SQL Server 2017 и новее.В 2008 году вы можете выполнить несколько уродливых преобразований, используя предложение FOR XML .

Вот оба запроса для реализации вариантов 1 и 2:

;with cte1 as (
SELECT
    CAST(DATEPART(year, stat_datetimeresolved) as varchar(4)) + '-' + RIGHT('0' + CAST(DATEPART(month, stat_datetimeresolved) as varchar(2)), 2) as MonthResolved
    , ResolvedByTeam
    , resolvedby
FROM [dbo].[Incident]
WHERE stat_datetimeresolved >= '20170401'
GROUP BY CAST(DATEPART(year, stat_datetimeresolved) as varchar(4)) + '-' + RIGHT('0' + CAST(DATEPART(month, stat_datetimeresolved) as varchar(2)), 2), ResolvedByTeam, resolvedby
)
select
    MonthResolved
    , ResolvedByTeam
    , (select count(distinct resolvedby) as Name
       from [dbo].[Incident] i 
       where CAST(DATEPART(year, stat_datetimeresolved) as varchar(4)) + '-' + RIGHT('0' + CAST(DATEPART(month, stat_datetimeresolved) as varchar(2)), 2) = cte1.MonthResolved
         and i.ResolvedByTeam = cte1.ResolvedByTeam)
    , resolvedby
from cte1
ORDER BY MonthResolved asc, ResolvedByTeam, resolvedby

;with cte2 as (
SELECT
    CAST(DATEPART(year, stat_datetimeresolved) as varchar(4)) + '-' + RIGHT('0' + CAST(DATEPART(month, stat_datetimeresolved) as varchar(2)), 2) as MonthResolved
    , ResolvedByTeam
    , COUNT(DISTINCT resolvedby) as ResolvedByCnt
FROM [dbo].[Incident]
WHERE stat_datetimeresolved >= '20170401'
GROUP BY CAST(DATEPART(year, stat_datetimeresolved) as varchar(4)) + '-' + RIGHT('0' + CAST(DATEPART(month, stat_datetimeresolved) as varchar(2)), 2), ResolvedByTeam
)

select *
from cte2
cross apply (select (
    select distinct resolvedby + ', ' as [text()]
    from [dbo].[Incident] 
    where ResolvedByTeam = cte2.ResolvedByTeam
        and CAST(DATEPART(year, stat_datetimeresolved) as varchar(4)) + '-' + RIGHT('0' + CAST(DATEPART(month, stat_datetimeresolved) as varchar(2)), 2) = cte2.MonthResolved
    for xml path ('')) as Names) t
ORDER BY MonthResolved asc, ResolvedByTeam
...