2017-04-06 12 views
1

[ここに画像の説明を入力してください] [1] enter image description hereすべてのコーダに親愛なるこの助けてください。私はSQL Server 2008でテーブルを作成することができませんが、いずれか1つこれで私を助けることができます。私を信じて、私の頭を全滅させた後、ここに来ます。ここに私のコードはあります: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

このような迅速な返信をありがとうが、私の要件を満たしていません。私が望むのは、挿入するすべての行のデビット - クレジットの合計について、バランスを自動的に計算する必要がある各トランザクションの行ごとです.1行分のデビットクレジットではなく、前の行全体のデビットクレジットであるべきです。私は写真を添付し​​ました、あなたは私をさらに案内してください。申し訳ありませんが、私はあなたを理解することができません。 –

+0

@DharamRaiああそういうわけで、そんなインラインではできない。関数を作成し、その関数を計算カラムに使用することもできますが、それは良い考えではありません。とにかくそれを永続化または索引付けすることはできません。私は計算カラムの代わりにあなたの基準を満たす 'view'を作成することをお勧めします。 – SqlZim

+0

あなたは私にそれを行う方法を寄付してください、私は何もしていませんでした:( –

関連する問題