0
同じテーブルの前の行の列値を持つ計算列が必要なテーブルを作成しようとしています。しかし、私はLAG関数をうまく使うことができません。SQL Serverの計算列を定義する際にLAG関数を使用できません2014
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のコーディングに慣れていないので、すみません。
多くのありがとうございました
ありがとうございましたGordonさん、テーブルの代わりにビューから値を取得するようにロジックを変更しました。 – Yenge