2016-11-24 3 views
0

У меня есть запрос ниже, который возвращает количество билетов. Я также хочу, чтобы запрос возвращал отдельные номера билетов в счет. Это запрос:Добавление отдельных значений в запрос подсчета

;WITH CTE 
AS 
(
select SR_Service_RecID 
from SR_Audit 
where Audit_Text like 'Ticket status has been changed from % to "Internal"%' OR 
     Audit_Text like 'Ticket status has been changed from % to "Closed"%' OR 
     Audit_Text like 'Ticket status has been changed from % to "First Contact Resolution"%' 
) 
SELECT Board_Name, COUNT(DISTINCT A.SR_Service_RecID) AS 'Re-Opened Tickets' 
FROM CTE 
JOIN SR_Audit A 
    ON CTE.SR_Service_RecID = A.SR_Service_RecID 
JOIN v_rpt_service vsrv 
    ON vsrv.TicketNbr = A.SR_Service_RecID 
WHERE Audit_Text LIKE 'Ticket status has been changed from%"Re-Opened"%' 
    AND vsrv.company_name <> 'XYZ Test Company' 
    AND vsrv.date_entered BETWEEN @StartDate AND @EndDate 
    AND Board_Name in (@BoardName) 
GROUP BY Board_Name 

возвращает:

Board Name Count 
IT Services  4 

Я хочу, чтобы вернуть это:

Board Name Count Ticket Number 
IT Services 4   12346 
IT Services 4   12445 
IT Services 4   56345 
IT Services 4   12384 

Как я могу добавить номера билета на результат?

+0

вы можете показать нам некоторые выборочные данные для создания такого результата? –

ответ

1

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

приведен упрощенный вариант для Вашего случая будет:

SELECT [BoardName], 
     COUNT([Ticket Number]) Over (PARTITION BY [BoardName]) as [Count], 
     [Ticket Number] 
FROM YourBoardTable 

PARTITION BY [BoardName] будет делать трюк, и вам не нужно GROUP BY

Вариант B: Вы вычислить общее, а затем РЕГИСТРИРУЙТЕСЬ обратно в оригинале запрос

WITH cte as ( 
    --Same as your current CTE 
), filter as (
     SELECT Board_Name, 
       DISTINCT A.SR_Service_RecID AS 'Re-Opened Tickets' 
     FROM CTE .... 
     -- Your filter query without COUNT/GROUP BY 
), cnt as (
     SELECT [BoardName], 
      COUNT([Re-Opened Tickets]) as COUNT 
     FROM filter 
     GROUP BY [BoardName] 
) 
SELECT F.[BoardName], 
     C.[Count], 
     F.[Ticket Number] 
FROM filter F 
JOIN cnt C 
    ON Y.[BoardName] = C.[BoardName] 

Вариант C: с фильтром теперь вы можете использовать окно FUNCTION3

SELECT [BoardName], 
     COUNT([Re-Opened Tickets]) Over (PARTITION BY [BoardName]) as [Count], 
     [Ticket Number] 
FROM filter 
+0

Спасибо за ваше предложение. Результаты ближе, но все же не правильны. Мне нужно использовать ключевое слово 'DISTINCT' в функции' COUNT', но это недопустимо при использовании 'PARTITION' –

+0

. Поэтому всегда приятно включать некоторые примеры данных, чтобы мы могли их протестировать. –

+0

Существует много данных. Я нашел что-то об использовании функции max и dense_rank с Partition, но все еще изучал ее. –

0

Попробуйте

;WITH CTE 
AS 
(
select SR_Service_RecID 
from SR_Audit 
where Audit_Text like 'Ticket status has been changed from % to "Internal"%' OR 
    Audit_Text like 'Ticket status has been changed from % to "Closed"%' OR 
    Audit_Text like 'Ticket status has been changed from % to "First Contact Resolution"%' 
) 
SELECT cte.SR_Service_RecID,Board_Name, COUNT(DISTINCT A.SR_Service_RecID) AS 'Re-Opened Tickets' 
FROM CTE 
JOIN SR_Audit A 
ON CTE.SR_Service_RecID = A.SR_Service_RecID 
JOIN v_rpt_service vsrv 
ON vsrv.TicketNbr = A.SR_Service_RecID 
WHERE Audit_Text LIKE 'Ticket status has been changed from%"Re-Opened"%' 
AND vsrv.company_name <> 'XYZ Test Company' 
AND vsrv.date_entered BETWEEN @StartDate AND @EndDate 
AND Board_Name in (@BoardName) 
GROUP BY cte.SR_Service_RecID,Board_Name 
Смежные вопросы