sql查询将单元格值设置为另一列中另一个单元格之间的差异减去先前结果

问题描述 投票:2回答:1

我尝试了以下查询,但它会抛出错误,

当未使用EXISTS引入子查询时,只能在选择列表中指定一个表达式

UPDATE dbo.SFData 
SET KPIperMonth =
    (SELECT KPIValue, KPIValue - LAG(KPIValue) OVER (ORDER BY SFID) PreviousValue
     from dbo.SFData)

我所拥有的是如下表格

SFID|KPIValue|KPIperMonth
---------------------
1   |1       |
2   |3       |
3   |5       |

上表显示了以KPIValue为单位的累计销售额。我想要这些结果:

SFID|KPIValue|KPIperMonth
---------------------
1   |1       |1
2   |3       |2 (3-1)
3   |5       |2 (5-3)
sql sql-server
1个回答
2
投票

试试这个:

WITH Previous_KPI AS
(
    SELECT SFID, KPIValue, KPIValue - LAG(KPIValue,1,0) OVER (ORDER BY SFID) PreviousValue
    FROM SFData
)

UPDATE 
    SFData
SET 
    SFData.KPIperMonth = Previous_KPI.PreviousValue
FROM
    SFData 
    LEFT JOIN Previous_KPI
        ON SFData.SFID = Previous_KPI.SFID
© www.soinside.com 2019 - 2024. All rights reserved.