【问题标题】:How can we use LAG() in SQL server 2008 R2? [duplicate]我们如何在 SQL Server 2008 R2 中使用 LAG()? [复制]
【发布时间】:2020-01-15 17:02:37
【问题描述】:
SELECT
  CASE
    WHEN ser.[Department Name] = LAG(SER.[Department Name]) OVER (ORDER BY SER.[Department Name]) THEN ''
    ELSE SER.[Department Name]
  END [Department Name] from department

【问题讨论】:

  • 通过升级到支持的 sql server 版本。 LAG 在 2008R2 中不可用,因此您无法使其工作,它不存在。但是你真的需要考虑升级。几个月来,该版本已不受支持。
  • 您可以尝试使用其他窗口函数,如 DENSE_RANK 与递归 CTE 的组合。 DENSE_RANK 和 CTE 在 2K8R2 中都可用
  • 2008R2 中 LAG() 函数的任何替代项
  • 一种解决方案是使用由 ROW_NUMBER() 或某些变体派生的序列链接的左/自连接 CTE。然后在自联接的领先或滞后表上使用聚合。
  • LAGalternative(您不能替代LAG)将是aCTE、ROW_NUMBER 和自引用CTE。但真正的解决方案是升级。

标签: sql-server sql-server-2008-r2


【解决方案1】:

你可以使用APPLY

SELECT (CASE WHEN d.[Department Name] = Prev_Dept
             THEN '' ELSE d.[Department Name]
        END) AS DepartmentName
FROM department d OUTER APPLY
     ( SELECT TOP (1) d1.[Department Name] AS Prev_Dept
       FROM department d1
       WHERE d1.? < d.?
       ORDER BY ? DESC
     ) AS Pd;

?表示标识唯一数据序列的标识列。

【讨论】:

    猜你喜欢
    • 2016-01-21
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2013-05-16
    相关资源
    最近更新 更多