我正在使用 SQL 语句来比较字段 [Allocation] 的连续值,如下所示:
;WITH cteMain AS
(SELECT AllocID, CaseNo, FeeEarner, Allocation, ROW_NUMBER() OVER (ORDER BY AllocID) AS sn
FROM tblAllocations)
SELECT m.AllocID, m.CaseNo, m.FeeEarner, m.Allocation,
ISNULL(sLag.Allocation, 0) AS prevAllocation,
(m.Allocation - ISNULL(sLag.Allocation, 0)) AS movement
FROM cteMain AS m
LEFT OUTER JOIN cteMain AS sLag
ON sLag.sn = m.sn-1;
该查询返回一个计算字段 [movement],它是 [Allocation] 的连续值的增加或减少。
我已包含此查询返回的数据的屏幕截图。
但是,查询尚未完成。我需要修改语句,以便比较的 [Allocation] 的连续值由 [FeeEarner] 和 [CaseNo] 分组/分区。
例如,在数据的第 18 行,[Allocation] 为 800,并与之前的值 600 进行比较。但之前的值属于不同的 [CaseNo],即 6 而不是 31。实际上 [FeeEarner] 'PJW ' 在 [CaseNo] '31' 上没有先前的 [Allocation],因此 [prevAllocation] 应该是 ISNULL 关键字中的 '0'。
我试过改变
OVER (ORDER BY AllocID)
到
OVER (PARTITION BY CaseNo, FeeEarner ORDER BY AllocID)
但这会导致大量数据行重复。
有人可以建议如何比较 [Allocation] 的连续值,但只能在具有匹配 [FeeEarner] 和 [CaseNo] 的数据行之间进行比较吗?
注意- 我不能使用 LAG,因为我的客户使用的是不支持并行数据仓库的 SQL Server 2008 R2。