Sql 在现有表上添加派生列
可能重复:Sql 在现有表上添加派生列,sql,sql-server,tsql,calculated-columns,Sql,Sql Server,Tsql,Calculated Columns,可能重复: 我有一个带有值的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.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
这是表的基本快照。“汇总”字段在“日期”列中给出年末金额的总计,但仅当月份(日期)=“12”时。数百个账户都是这样,大约还有4年。我想在现有表中添加一列,称为“SummaryPreviousYear”。SummaryPreviousYear列应包含从月份(日期)=“12”到上一年的金额之和。我想在帐号上加入此列,这样它就位于摘要列的旁边,并给出一个与摘要值相同的值。有人能帮我吗?我在这里拔头发。非常感谢您的帮助。假定
[Account]
和[Date]
是唯一的,只需将加入到同一个表中,如下所示:
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
,请改为左外部联接。在查看“2011-12-1”摘要时,仅查询帐户的“2010-12-1”信息是否不够?一个简单的“递减1年并从该条目中获取摘要”类型的东西。。为什么有另一个专栏?即使是当前的“Summary”列也是多余的。您缺少一个和DATEPART(“mm”,a.[date])=12Matthew PK,谢谢,这个自连接查询提供了很多细节。但是,帐户和日期不是唯一的。有一个“位置”栏。位置、帐户和日期的组合是唯一的。我得到了多余的值/这是一个经过编辑的问题形式,包含了所需的详细信息……很抱歉,我第一次没有在@Deep中包含这些内容,然后您只需基于所有保证日期唯一性的值加入行即可。您最初的请求没有提到位置列。@这不是我理解的要求吗?我认为每一行应该有上一年12月的值,而不仅仅是今年12月的值。