我一直坚持这个问题并且寻求帮助。
我有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列应具有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
任何人都可以帮我吗?我在这里拉头发2天,需要创建这个数据集,以便我可以继续我的报告开发。不幸的是,DBA的非现场。字面意思是我的智慧结束。任何帮助将不胜感激。
答案 0 :(得分:1)
为什么要为数据库中的每一行复制此摘要和上一年的摘要数据?这是浪费和不必要的。如果有另一个表格,每年有一行,可以加入到这个表格,那将会好得多。并且,我认为根本不需要“摘要”列。为什么不在月份为12时创建计算摘要的视图,并且对于不等于12的任何月份返回零。
答案 1 :(得分:0)
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
答案 2 :(得分:0)
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