在现有表上添加派生列

时间:2012-08-10 17:53:17

标签: sql sql-server tsql calculated-columns

  

可能重复:
  Derived/calculated column on existing table

我有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(日期)='12'时。对于数百个帐户来说,这种方式也是如此,大约还有4年。我想在这个现有的表中添加一个列,名为“SummaryPreviousYear”。 SummaryPreviousYear列应具有MONTH(Date)='12'和上一年的金额之和。我想在帐号上加入此列,以便它位于“摘要”列旁边,并提供与“值”值相同的值。谁能帮我这个?我把头发拉到这里。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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

对于任何数据点,第一年和第12年的行不应超过一行。如果您想要第一年行的NULL值,请改为LEFT OUTER JOIN