0

重複の可能性:
既存のテーブルの派生/計算列

次のように、値を持つ 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
10001 - 2010-1-1 - 50.00 - 0.00
10001 - 2010-2-1 - 60.00 - 0.00
10001 - 2010-12-1 - 60.00 - 170.00

これは、テーブルの基本的なスナップショットです。「概要」フィールドは、日付列の年末の金額の合計を示しますが、MONTH(Date) = '12' の場合のみです。何百ものアカウントでこのように進み、さらに約4年も続きます. この既存のテーブルに「SummaryPreviousYear」という列を追加したいと思います。SummaryPreviousYear 列には、MONTH(Date) = '12' と前年の金額の合計が含まれている必要があります。この列をアカウント番号で結合して、[概要] 列の隣に配置し、[概要] の値と同じように値を提供したいと考えています。誰でもこれで私を助けることができますか?ここで髪を引っ張っています。どんな助けでも大歓迎です。

4

1 に答える 1

0

[Account][Date]が一意であると仮定すると、JOIN次のように同じテーブルに配置されます。

SELECT
    a.* -- you should explicitly list the columns you want, though
    ,b.[Summary] SummaryPreviousYear
FROM
    myTable a
JOIN
    myTable b
        ON b.[Account] = a.[Account]
        AND DATEPART("yyyy" , b.[date] ) = DATEPART("yyyy" , a.[date] ) - 1
        AND DATEPART("mm" , b.[date] ) = 12
        -- AND whatever other conditions define unique rows

どのデータ ポイントについても、年が 1 で月が 12 の行が 1 つしかない必要があります。NULL1 年目の行の値が必要な場合は、LEFT OUTER JOIN代わりにこれを a にします。

于 2012-08-10T18:02:21.943 に答える