2017-04-06 25 views
1

[1] enter image description here亲爱的所有编码器,请帮助我与此。我无法在sql server 2008中创建表,任何人都可以帮助我。相信我,我在全身心的冲击后来到这里。这里是我的代码:SQL查询不能创建表与自动计算列

CREATE TABLE [dbo].[STransactions](
    [ATId] [int] IDENTITY(1,1) NOT NULL, 
    [ItemId] [nvarchar](max) NOT NULL, 
    [ADeposit] [int] NULL, 
    [ACredit] [int] NULL, 
    [ABalance] AS sum([ADeposit]-[ACredit]) 
) ON [PRIMARY] 

GO 

回答

1

你不需要sum()那个;只是减法。

CREATE TABLE [dbo].[STransactions](
    [ATId] [int] IDENTITY(1,1) NOT NULL, 
    [ItemId] [nvarchar](max) NOT NULL, 
    [ADeposit] [int] NULL, 
    [ACredit] [int] NULL, 
    [ABalance] AS ([ADeposit]-[ACredit]) 
) ON [PRIMARY] 

GO 

对于具有运行平衡喜欢你的图片视图:

create view dbo.STransactions_wBalance as 
    select 
     t.AtID 
    , t.ItemId 
    , t.ADeposit 
    , t.ACredit 
    , x.Balance 
    from dbo.STransactions t 
    cross apply (
    select Balance = sum(ADeposit-ACredit) 
    from dbo.STransactions as i 
    where i.ItemId = t.ItemId 
     and i.AtID <= t.AtID 
    ) x; 
go 

然后查询视图而不是表。

+0

感谢您的快速回复,但它不符合我的要求。我想要的是每笔交易的每一行都应该自动计算余额,对于我插入的每一行中的借方 - 贷方总额,它不应该是单行的借方 - 贷方,而是整个上一行。我附上了这张照片,可否请您进一步指导我..对不起,如果我无法让你理解。 –

+0

@DharamRai啊我明白了....你不能这样做。你可以创建一个函数,并为你的计算列使用该函数 - 但这不是一个好主意。无论如何,你将无法坚持或编入索引。我会建议创建一个满足您的条件而不是计算列的“视图”。 – SqlZim

+0

你能否请捐我如何做到这一点,我没有做过任何:( –