标记值从上一行更改的行

时间:2015-08-20 17:55:10

标签: sql reporting-services

我有一个跟踪制作的查询。无论何时生成单元,我都会捕获时间戳,部件号,增量时间以及循环时间应该是什么,以及其他不重要的列表。在SSRS报告中,我计算行数并按小时对它们进行分组,并根据周期时间除以增量来每小时运行效率计算。我需要的是在我的select语句中添加一个列,该列将在零件号发生变化时进行标记,以便通过在报表中引用它来确定何时发生了转换。

示例:选择行的部件号 - 上一行的部件号作为转换

除非发生转换,否则每行的值始终为0,那么对于那一行,它将是不同的值。我可以让我的报告对任何值进行处理<> 0

1 个答案:

答案 0 :(得分:1)

如SQLHound所述,如果您使用的是SQL Server 2012或其他支持LAG功能的数据库,那么您可以在SQL查询中使用它。

SQL Server示例:

SELECT
  partnumber,
  somevalue,
  CASE
    WHEN LAG(partnumber, 1) OVER (ORDER BY partnumber) <> partnumber THEN 1
    ELSE 0
  END AS PartNumberChangeOver
FROM ntest;

see it on SQL Fiddle

如果您的源数据库不支持LAG,那么您能告诉我们它是什么数据库/版本,以便我们可以尝试提供替代解决方案。

更新:对于2012年之前的SQL Server版本,使用CTE的其他示例:

WITH ntestCTE
AS (SELECT
  rownum = ROW_NUMBER() OVER (ORDER BY ntest.partnumber),
  ntest.partnumber,
  ntest.somevalue
FROM ntest)
SELECT
  ntestCTE.partnumber,
  ntestCTE.somevalue,
  CASE
    WHEN ntestCTE.partnumber <> prev.partnumber THEN 1
    ELSE 0
  END AS PartNumberChangeOver
FROM ntestCTE
LEFT JOIN ntestCTE prev
  ON prev.rownum = ntestCTE.rownum - 1

See it on SQL Fiddle