在现有的表导出/计算的列(Derived/calculated column on existing

2019-07-30 21:57发布

我已经要疯了在这个问题上有一段时间了,我寻求帮助。

我有值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(日期)=“12”。 它继续这样的几百个账户,大约有4年以上为好。 我想一列添加到这个现有的表,称为“SummaryPreviousYear”。 该SummaryPreviousYear列应有的金额从月(日期)的总和=“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的场外。 从字面上看在我束手无策。 任何帮助将不胜感激。

Answer 1:

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


Answer 2:

你为什么要复制这个总结和上年末汇总数据在数据库中的每一行? 这是浪费和不必要的。 这将是好得多与上年摘要另一个表,每年一排,你可以加入到这个表。 而且,我不认为有必要作一个总结列在所有。 为什么不创建一个计算总之,当月份为12,而对于任何一个月不等于12返回零的视图。



Answer 3:

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


文章来源: Derived/calculated column on existing table