我正在100多个拥有一个应用程序数据库的客户端上实现一个简单的数据仓库。一些客户使用SQL Server 2008,这使我的脚本无法引用CONCAT和LAG。
有关如何解决此问题的最初想法是:
我认为我可以复制LAG的行为,但是我怀疑要花一些时间才能使其对数百万行的数据有效地执行。构建会在夜间重现,因此速度不是最高优先级。
答案 0 :(得分:0)
LAG 不兼容:
我通过使用ROWCOUNT来标识行的顺序来代替使用LAG,并使用子选择来引用CTE后半部分中的相同数据集,以便按时间回溯到上一行。分区的行块。
这是一个简化的图示:
`CTE xyz(
SELECT [Field 1]
, [Field 2]
, [Year]
, [Period]
, ROWCOUNT(PARTITION BY [field 1], ORDER BY [Year] ASC, [Period] ASC) [Row]
FROM table
)
SELECT *
, (SELECT [Field 2] FROM xyz x1 WHERE x1.[Field 1] = [Field 1] AND [Row] - 1 = x1.[Row]) [Old row]
FROM xyz`
CONCAT 不兼容:
我使用历史悠久的'+'运算符来连接VARCHAR,并使用ISNULL来处理NULL,因为我想包括确实存在的数据。
SELECT ISNULL([Field 1], ''), + ISNULL([Field 2])
FROM table