2016-08-07 20 views
1

以下の受注などの同じカテゴリのグループの合計行である計算列(持続)を追加したいとします。 SQL Serverでこれをどのように行いますか?SQLで特定の行の計算列を追加する方法

SalesOrder Amount Total(calculated) 
    100   10  25 
    100   15  25 
    101   20  45 
    101   25  45 
    102   30  65 
    102   35  65 

答えて

1

自動的に維持される事前計算凝集を格納するために使用するのに最適な機構は、インデックス付きビューになり、それが永続化計算カラムを介して可能ではない(あなたが計算する計算カラムにスカラーUDFを使用することができ結果は残ることはありませんが、このような計算された列は一般に、RBAR評価を強制したり、並列処理をブロックしたりするため、パフォーマンスに悪影響を与えます。

CREATE VIEW dbo.AggregatedSales 
WITH SCHEMABINDING 
AS 
SELECT SalesOrder, 
     SUM(Amount) AS Total 
FROM dbo.YourTable 
GROUP BY SalesOrder 

GO 

CREATE UNIQUE CLUSTERED INDEX UIX ON dbo.AggregatedSales(SalesOrder) 

そして凝集体を予め考慮して算出して記憶します。クエリがビューに参加する必要があります。あらかじめ計算された集計が実際に使用され、実行時に再計算されないようにするには、NOEXPANDヒントを使用する必要があります。 SQL Serverの

+0

グレート、ありがとう!スタックエクスチェンジのスピードはすごいです。 –

+0

@el_kraken、この答えが役に立つ場合は、答えを受け入れてください。 – RGS

0
CREATE TABLE #t (saleOrder int , amount int) 

    INSERT INTO #t VALUES 
    (100,10) 
    ,(100,15) 
    ,(101,20) 
    ,(101,25) 
    ,(102,30) 
    ,(102,35) 

     SELECT * 
      ,SUM(amount) OVER (PARTITION BY saleorder) as [total] 
     FROM #t 

結果:

saleOrder | amount | total 
========================== 
    100 | 10 | 25 
    100 | 15 | 25 
    101 | 20 | 45 
    101 | 25 | 45 
    102 | 30 | 65 
    102 | 35 | 65 
+0

これは実際には2005年以降に動作します。 –

関連する問題