簡體   English   中英

現有表上的派生/計算列

[英]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 
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

誰能幫我這個? 我在這里呆了兩天,需要創建此數據集,以便繼續進行報表開發。 不幸的是,DBA不在現場。 從字面上看我的機智。 任何幫助將不勝感激。

為什么要為數據庫中的每一行重復此摘要和上一年的摘要數據? 這是浪費和不必要的。 最好有另一個具有上一年度摘要的表(每年一行),您可以加入該表。 而且,我根本不需要“摘要”列。 為什么不創建一個視圖來計算摘要,當月份為12時,對於任何不等於12的月份都返回零。

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
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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM