我有一个跟踪制作的查询。无论何时生成单元,我都会捕获时间戳,部件号,增量时间以及循环时间应该是什么,以及其他不重要的列表。在SSRS报告中,我计算行数并按小时对它们进行分组,并根据周期时间除以增量来每小时运行效率计算。我需要的是在我的select语句中添加一个列,该列将在零件号发生变化时进行标记,以便通过在报表中引用它来确定何时发生了转换。
示例:选择行的部件号 - 上一行的部件号作为转换
除非发生转换,否则每行的值始终为0,那么对于那一行,它将是不同的值。我可以让我的报告对任何值进行处理<> 0
答案 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;
如果您的源数据库不支持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