簡體   English   中英

限制SSRS SQL查詢的結果

[英]Limiting results in SSRS SQL query

我正在嘗試使用SSRS建立一個關於我們的票務系統的報告。 我從“事件正文”表和“事故詳情”表中引入字段。 我正在尋找的是機票是否已經超過SLA以響應客戶。

我正在檢查過去SLA的門票有兩種方式:

1)票證超過SLA日期,並且沒有與預定類型匹配的詳細記錄
2)票證具有與預定類型匹配的詳細記錄,但是在SLA日期之后

我能夠在下面構建CTE部分,但我正在努力將如何將其結果減少到最舊的匹配行/記錄。 票證只應在報告中顯示一次。

例如:

Johnny Blogs使用2016年1月1日的CONTACTED_TM記錄類型更新票證。 SLA是2015年12月31日。 第二天(2016年1月),他還使用EMAILOUT記錄類型向TM發送電子郵件。 CTE返回這兩行/記錄。 我只想要第一個結果。

我的查詢代碼如下。 我嘗試在CTE中使用SELECT TOP 1,但它只是導致它沒有返回任何結果。

WITH CTE (Date, [Action ID], Description, Note, [Login ID], [Seq.Group], [Incident #], ResponseDue) AS
(
SELECT Date, [Action ID], [Incident Details].Description, [Incident Details].Note, [Login ID], [Incident Details].[Seq.Group], [Incident Details].[Incident #], [Incident].[Due Date & Time:] as ResponseDue
FROM [_SMDBA_].[Incident Details]
JOIN [_SMDBA_].[Incident]
ON [Incident Details].[Incident #] = [Incident].[Incident #]
WHERE ([Action ID] = 'CONTACTED_TM' OR [Action ID] = 'TM_UNAVAILABLE' OR ([Action ID] = N'EMAILOUT' AND _SMDBA_.[Incident].[Client Email] in ([Email To Email From])))
--AND Date >= Incident.[Due Date & Time:]
)

SELECT
I.[Incident #]
,I.[Group Name]
,I.[Seq.Group] as IncidentGroupSeq
,I.[Due Date & Time:] as ResponseDue
,I.[Priority ID:]
,I.[Priority Duration]
,I.[Subject ID]
,I.[Open Date & Time] as OpenDate
,I.[Impact ID:] as Impact
,I.[Urgency ID:] as Urgency

,CTE.[Action ID]
,CTE.Description
,CTE.Note
,CTE.[Login ID]
,CTE.Date AS IncidentDetailsDate
,CTE.[Seq.Group] as DetailsGroupSeq

,_SMDBA_.CalcWorkingSeconds(1001,[Due Date & Time:],CTE.Date) as WorkingSecs

,CASE
       WHEN CTE.date >= I.[Due Date & Time:] THEN 'Response was Late'
          WHEN CTE.Date IS NULL THEN 'There was no response'
          WHEN CTE.date <= I.[Due Date & Time:] THEN 'Met SLA'
          WHEN I.[Due Date & Time:] IS NULL THEN 'No Response date set'
      END AS SLAStatus

FROM [_SMDBA_].Incident I
LEFT OUTER JOIN CTE
ON CTE.[Incident #] = I.[Incident #]
WHERE 
 I.[Open Date & Time] >= @StartDate
AND I.[Open Date & Time] <= @EndDate
AND I.[Group Name] in (@Group)
AND I.[Impact ID:] in (@Impact)
AND I.[Urgency ID:] in (@Urgency)
AND I.[Opened Group:] = 'SERVICE DESK'

像評論中引用的那樣的東西。

WITH CTE ([Date], [Action ID], Description, Note, [Login ID], [Seq.Group], [Incident #], ResponseDue) AS
(
    SELECT 
        [Date], 
        [Action ID], 
        [Incident Details].Description, 
        [Incident Details].Note, 
        [Login ID], 
        [Incident Details].[Seq.Group], 
        [Incident Details].[Incident #], 
        [Incident].[Due Date & Time:] as ResponseDue,
        row_number() over (partition by [Incident Details].[Incident #] order by [Date] desc) as RN
    FROM [_SMDBA_].[Incident Details]
        JOIN 
            [_SMDBA_].[Incident]
            ON [Incident Details].[Incident #] = [Incident].[Incident #]
    WHERE 
        ([Action ID] = 'CONTACTED_TM' OR [Action ID] = 'TM_UNAVAILABLE' OR 
        ([Action ID] = N'EMAILOUT' AND _SMDBA_.[Incident].[Client Email] in ([Email To Email From])))
--AND Date >= Incident.[Due Date & Time:]
)

SELECT
I.[Incident #]
,I.[Group Name]
,I.[Seq.Group] as IncidentGroupSeq
,I.[Due Date & Time:] as ResponseDue
,I.[Priority ID:]
,I.[Priority Duration]
,I.[Subject ID]
,I.[Open Date & Time] as OpenDate
,I.[Impact ID:] as Impact
,I.[Urgency ID:] as Urgency

,CTE.[Action ID]
,CTE.Description
,CTE.Note
,CTE.[Login ID]
,CTE.Date AS IncidentDetailsDate
,CTE.[Seq.Group] as DetailsGroupSeq

,_SMDBA_.CalcWorkingSeconds(1001,[Due Date & Time:],CTE.Date) as WorkingSecs

,CASE
       WHEN CTE.date >= I.[Due Date & Time:] THEN 'Response was Late'
          WHEN CTE.Date IS NULL THEN 'There was no response'
          WHEN CTE.date <= I.[Due Date & Time:] THEN 'Met SLA'
          WHEN I.[Due Date & Time:] IS NULL THEN 'No Response date set'
      END AS SLAStatus

FROM [_SMDBA_].Incident I
LEFT OUTER JOIN CTE
ON CTE.[Incident #] = I.[Incident #]
WHERE 
 I.[Open Date & Time] >= @StartDate
AND I.[Open Date & Time] <= @EndDate
AND I.[Group Name] in (@Group)
AND I.[Impact ID:] in (@Impact)
AND I.[Urgency ID:] in (@Urgency)
AND I.[Opened Group:] = 'SERVICE DESK'
AND CTE.RN = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM