1

私はしばらくの間、この問題に頭がおかしくなり、助けを求めています。

次のように、値を持つ SQL Server テーブルがあります。

Account - Date - Amount - Summary 
10000 - 2010-1-1 - 50.00 - 0.00 
10000 - 2010-2-1 - 50.00 - 0.00 
10000 - 2010-3-1 - 50.00 - 0.00 
10000 - 2010-4-1 - 50.00 - 0.00 
10000 - 2010-5-1 - 50.00 - 0.00 
10000 - 2010-6-1 - 50.00 - 0.00 
10000 - 2010-7-1 - 50.00 - 0.00 
10000 - 2010-8-1 - 50.00 - 0.00 
10000 - 2010-9-1 - 50.00 - 0.00 
10000 - 2010-10-1 - 50.00 - 0.00 
10000 - 2010-11-1 - 50.00 - 0.00 
10000 - 2010-12-1 - 50.00 - 600.00 
10000 - 2011-1-1 - 25.00 - 0.00
10000 - 2011-2-1 - 25.00 - 0.00
10000 - 2011-3-1 - 50.00 - 0.00
10000 - 2011-4-1 - 50.00 - 0.00
10000 - 2011-5-1 - 50.00 - 0.00
10000 - 2011-12-1 - 25.00 - 825.00
10000 - 2012-1-1 - 100.00 - 0.00
10000 - 2012-2-1 - 200.00 - 0.00
10000 - 2012-3-1 - 100.00 - 0.00
10000 - 2012-5-1 - 100.00 - 0.00
10000 - 2012-6-1 - 100.00 - 0.00
10000 - 2012-8-1 - 100.00 - 0.00
10000 - 2012-12-1 - 100.00 - 1625.00
10001 - 2010-1-1 - 50.00 - 0.00 
10001 - 2010-2-1 - 60.00 - 0.00 
10001 - 2010-12-1 - 60.00 - 170.00 
10001 - 2011-1-1 - 50.00 - 0.00
10001 - 2011-2-1 - 50.00 - 0.00
10001 - 2011-3-1 - 50.00 - 0.00
10001 - 2011-4-1 - 50.00 - 0.00
10001 - 2011-6-1 - 50.00 - 0.00
10001 - 2011-8-1 - 50.00 - 0.00
10001 - 2011-10-1 - 50.00 - 0.00
10001 - 2011-12-1 - 50.00 - 570.00

これは、テーブルの基本的なスナップショットです。「概要」列は、年末の「金額」の合計 (「日付」列に基づく) を示しますが、MONTH(Date) = '12' の場合のみです。何百ものアカウントでこのように進み、さらに約4年も続きます. この既存のテーブルに「SummaryPreviousYear」という列を追加したいと思います。SummaryPreviousYear 列には、MONTH(Date) = '12' と前年の金額の合計が含まれている必要があります。この列をアカウント番号で結合して、概要列の隣に配置し、概要値と同じように値を提供したいと思いますが、SummaryPreviousYear 値は、列全体に存在する必要があります。月が 12 の場所です。たとえば、次の行は次のようになります。

前:

Account - Date - Amount - Summary 
10001 - 2011-10-1 - 50.00 - 0.00
10001 - 2011-12-1 - 50.00 - 570.00

後:

Account - Date - Amount - Summary - SummaryPreviousYear
10001 - 2011-10-1 - 50.00 - 0.00 - 170.00
10001 - 2011-12-1 - 50.00 - 570.00 - 170.00

誰でもこれで私を助けることができますか?ここで 2 日間髪を伸ばしており、レポートの作成を進めるためにこのデータセットを作成する必要があります。残念ながら、DBA のオフサイトです。文字通り私の機知に富んだ。どんな助けでも大歓迎です。

4

3 に答える 3

1

データベースの各行について、この要約データと前年の要約データを複製するのはなぜですか? これは無駄であり、不必要です。このテーブルに結合できるように、1 年に 1 行、前年の要約を含む別のテーブルを作成する方がはるかに優れています。そして、Summary 列はまったく必要ないと思います。月が 12 のときに概要を計算し、12 以外の月にはゼロを返すビューを作成しないでください。

于 2012-08-10T20:12:36.773 に答える
0
SELECT 
    t.Account,
    t.Date,
    t.Amount,
    t.Summary,
    s.Summary as SummaryPreviousYear
FROM TestTable t    
JOIN (
    SELECT
        Account,
        DATEPART(YEAR, Date) as Year,
        SUM(Amount) as Summary
    FROM TestTable
    GROUP BY Account, DATEPART(YEAR, Date)
) s
    ON s.Account = t.Account
    AND s.Year = DATEPART(YEAR, Date) - 1
于 2012-08-10T20:13:31.500 に答える
0
SELECT    l.*, 
          q.summary AS SummaryPreviousYear
FROM      lists l
LEFT JOIN 
     (
          SELECT    Date, 
                    Summary
          FROM      lists 
          WHERE     MONTH(Date) = 12
     ) AS q  
          ON YEAR(l.Date) = YEAR(q.Date) + 1
于 2012-08-10T20:18:20.680 に答える