2016-10-14 3 views
1

Мне нужно добавить количество записей, в которых статус установлен в «повторно открынный». Но статус «вновь открыт» имеет несколько идентификаторов. Это подзапрос, который будет идентификатором «возобновить» статусы:Нужно добавить подзапрос в выражении CASE, которое является частью агрегатной функции

SELECT (CASE WHEN s.sr_status_recid = 1 THEN 1 ELSE 0 END) AS Reopened 
    from v_rpt_service s 
    where vsrv.sr_status_recid in 
     (select distinct SR_Status_RecID from SR_Status where [Description] like '%Re-opened%')) 

Это главный вопрос, что приведенный выше запрос должен быть частью:

SELECT DATEPART(WK, vsrv.date_entered) as WkNumber, 
     COUNT(vsrv.TicketNbr) AS OpenedIssues, --total ticket count 
     SUM(CASE WHEN vsrv.Closed_Flag = 1 THEN 1 ELSE 0 END) AS ClosedIssues, --sum of tickets with closed_flag = 1 
     (SELECT SUM(CASE WHEN s.sr_status_recid = 1 THEN 1 ELSE 0 END) 
     from v_rpt_service s 
     where vsrv.sr_status_recid in 
      (select distinct SR_Status_RecID from SR_Status where [Description] like '%Re-opened%')) AS ReopenedIssues, 
     SUM(CASE WHEN vsrvy.Surveys_Completed = 1 THEN 1 ELSE 0 END) AS SurveysCompletedWithConnectWise, -- Surveys_Completed flag in view is 1 
     SUM(CASE WHEN Source = 'Portal' THEN 1 ELSE 0 END) AS IssueLoggedPortal, 
     SUM(CASE WHEN Source = 'Email Connector' THEN 1 ELSE 0 END) AS IssueLoggedEmai 
FROM v_rpt_service vsrv LEFT OUTER JOIN v_rpt_SurveysByTicket vsrvy ON vsrv.TicketNbr = Vsrvy.SR_Service_RecID 
WHERE vsrv.company_name <> 'XYZ Test Company' AND vsrv.date_entered BETWEEN '01/01/2016' AND '10/07/2016' 
GROUP BY DATEPART(WK, vsrv.date_entered) 
ORDER BY WkNumber 

Как я могу иметь подзапрос, использует оператор CASE и агрегируется оператор CASE?

+1

Здесь отличное место, чтобы начать. http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –

+0

Вы уже использовали агрегированный отчет о случаях ... – scsimon

+0

Для ' Reopened 'column, мне нужно иметь подзапрос, а затем агрегировать. Но это не допускается. Поэтому мне нужно выбрать status_id, которые «повторно открыты», есть несколько повторно открывшихся статусов. Итак, мне нужно использовать подзапрос, как описано выше. Когда они будут выбраны, мне нужно их суммировать. Но подзапрос не допускается в совокупности. Есть ли другой способ, которым я могу это сделать? –

ответ

0

Вы можете использовать CROSS ОТНОСИТЬСЯ

SELECT DATEPART(WK, vsrv.date_entered) as WkNumber, 
     COUNT(vsrv.TicketNbr) AS OpenedIssues, --total ticket count 
     SUM(CASE WHEN vsrv.Closed_Flag = 1 THEN 1 ELSE 0 END) AS ClosedIssues, --sum of tickets with closed_flag = 1 
     SUM(CountReopen.YesNo) AS NumberOfReopen, 
     SUM(CASE WHEN vsrvy.Surveys_Completed = 1 THEN 1 ELSE 0 END) AS SurveysCompletedWithConnectWise, -- Surveys_Completed flag in view is 1 
     SUM(CASE WHEN Source = 'Portal' THEN 1 ELSE 0 END) AS IssueLoggedPortal, 
     SUM(CASE WHEN Source = 'Email Connector' THEN 1 ELSE 0 END) AS IssueLoggedEmail 
FROM v_rpt_service vsrv 
    LEFT OUTER JOIN v_rpt_SurveysByTicket vsrvy 
    ON vsrv.TicketNbr = Vsrvy.SR_Service_RecID 
    CROSS APPLY (
    SELECT IIF(COUNT(*) > 0,1,0) YesNo 
    FROM SR_Status 
    where [Description] like '%Re-opened%' 
     AND SR_Status_ID = vsrv.sr_status_recid 
) CountReopen(YesNo) 
WHERE vsrv.company_name <> 'XYZ Test Company' 
    AND vsrv.date_entered BETWEEN '01/01/2016' AND '10/07/2016' 
GROUP BY DATEPART(WK, vsrv.date_entered) 
ORDER BY WkNumber 

 Смежные вопросы

  • Нет связанных вопросов^_^