【发布时间】:2017-06-27 18:56:15
【问题描述】:
我正在尝试创建我想要计算列的表,该列将具有来自同一个表的前一行的列值。但我无法成功使用 LAG 功能。
CREATE TABLE DYL(
DY_DT DATE NOT NULL,
DY_SEN_NME varchar(20) NOT NULL,
DY_OEN_PRC numeric(14,2) NOT NULL,
DY_HEL_PRC numeric(14,2) NOT NULL,
DY_LEL_PRC numeric(14,2) NOT NULL,
DY_CLN_PRC numeric(14,2) NOT NULL,
DY_REG AS (DY_HEL_PRC - DY_LEL_PRC) PERSISTED,
DY_PRV_PRC AS LAG(DY_CLN_PRC,1,0) OVER (PARTITION BY DY_SEN_NME ORDER BY DT)
)
我收到错误 Windows 函数只能出现在 SELECT 或 ORDER BY 子句中。
如果这是不可能的,那么如何使用函数来实现。我尝试编写一个标量函数并将其关联到 DY_PRV_PRC。
ALTER TABLE DYL
ADD DY_PRV_PRC AS F_PRV_PRC()
但这在 DY_PRV_PRC 中给了我相同的值,而不是给我列 DY_CLN_PRC 的前一行值
下面是函数 F_PRV_PRC 的代码:
CREATE FUNCTION [dbo].[F_PRV_PRC] ()
RETURNS NUMERIC(14,2)
AS
BEGIN
DECLARE @pcp NUMERIC(14,2)
SELECT @pcp = LAG(DY_CLN_PRC,1,0) OVER (PARTITION BY DY_SEN_NME ORDER BY DY_DT)
FROM DYL;
RETURN @pcp;
END;
如果可能,请建议更改该函数,以便它可以给出前一行的列值。非常抱歉,因为我是 SQL 编码的新手。
提前致谢
【问题讨论】:
标签: sql sql-server sql-server-2014 calculated-columns lag