运行总计我有一个表在SQL Server 2012中是这样的:在持久化计算列
CREATE TABLE [dbo].[CustomerLedgerEntries]
(
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[CustReference] [bigint] NOT NULL,
[DebitAmount] [decimal](18, 2) NOT NULL,
[CreationTime] [datetime] NOT NULL,
[Description] [nvarchar](512) NULL,
[ProductId] [nvarchar](32) NULL,
CONSTRAINT [PK_dbo.CustomerLedgerEntries]
PRIMARY KEY CLUSTERED ([Id] ASC)
) ON [PRIMARY]
我想添加一个计算,坚持列,这将使我每一个客户的运行平衡。目前我使用此查询来获得每个客户的运行平衡:
SELECT
Id, CustReference, CreationTime, DebitAmount, CreditAmount,
SUM(DebitAmount - CreditAmount) OVER (PARTITION BY CustReference ORDER BY Id
ROWS UNBOUNDED PRECEDING) AS Balance
FROM
CustomerLedgerEntries
我尝试使用此查询添加计算列:
ALTER TABLE dbo.CustomerLedgerEntries
ADD Balance AS (SUM(DebitAmount - CreditAmount) OVER (PARTITION BY CustReference
ORDER BY Id
ROWS UNBOUNDED PRECEDING));
但它抛出一个错误:
Msg 4108, Level 15, State 1, Line 8
Windowed functions can only appear in the SELECT or ORDER BY clauses.
我该如何做到这一点?
编辑1: 低于以下@JM_建议,并创建一个UDF后,在表中的余额显示如下:
Id CusReference CreationTime DebitAmount CreditAmount Balance 30 3 2017-07-12 15:26:36.753 15000.00 0.00 14000.00 31 3 2017-07-12 15:26:36.753 0.00 1000.00 14000.00
当我运行查询而Select Id, CustReference, CreationTime, DebitAmount, CreditAmount , Sum(DebitAmount - CreditAmount) Over(Partition By CustReference Order by Id rows Unbounded Preceding) As Balance From CustomerLedgerEntries
结果显示正确:
30 3 2017-07-12 15:26:36.753 15000.00 0.00 15000.00 31 3 2017-07-12 15:26:36.753 0.00 1000.00 14000.00
所以几乎没有......但也不能令人信服。请问有什么帮助吗?
你正在尝试做的是不支持的,因为计算列具有信息只有大约是inserted..you可以创建尽管 – TheGameiswar
它不支持,因为它不确定性的视图的行。由于可以使用较早的ID添加新记录,从而导致该ID之后的所有记录重新评估给定的custReference;引擎无法更新超过这一条记录。计算列中不可能做什么。 – xQbert
在计算中如何使用UDF? –