我最终得到了一个解决方案,我想我不知道它有多优雅。它确实使用了减去开放式案例减去结案案例的想法,但它确保了通用案例式闭包不会影响计数,只有在结果集中包含的案例才会关闭。
DECLARE
@StartDate DATE = DATEADD(DAY, -5, GETDATE()) ,
@EndDate DATE = GETDATE()
SELECT
tt.Date ,
(SUM(tt.[Case Open]) - SUM(tt.[Case Closed])) [Open Cases]
FROM
(
SELECT
dateTbl.[Date] ,
CASE WHEN ISNULL(fi.createdon, 0) = 0 THEN 0
ELSE 1
END [Case Open] ,
CASE WHEN ISNULL(fir.createdon, 0) != 0
AND dateTbl.[Date] >= CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, fir.createdon))) THEN 1
ELSE 0
END [Case Closed]
FROM
(
SELECT
DATEADD(DAY, Nbr - 1, @StartDate) [Date]
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY c.object_id) AS Nbr FROM sys.columns c
) nbrs
WHERE
Nbr - 1 <= DATEDIFF(DAY, @StartDate, @EndDate)
) dateTbl
LEFT JOIN dbo.FilteredIncident AS fi ON CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, fi.createdon))) <= dateTbl.[Date]
AND fi.createdon >= @StartDate
LEFT JOIN dbo.FilteredIncidentResolution AS fir ON fir.incidentid = fi.incidentid
) tt
GROUP BY
tt.[Date]
ORDER BY
tt.[Date]
'tblCaseClose.CreatedOn'代表什么值?案件开庭日期或案件结案日期?对于任何问题,样本表数据,预期结果以及您迄今为止所获得的任何查询(即使它不工作)总是首选。 –
tblCaseClose.CreatedOn是案件结案的日期。为了这个问题,我简化了表格结构。我没有分享这个问题,因为我根本无法解决问题,担心它可能会混淆这个问题而不是解释它。 – fb88