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 个月的行不应超过一行。如果您想要NULL第一年行的值,请LEFT OUTER JOIN改为 a。

于 2012-08-10T18:02:21.943 回答