【问题标题】:Adding a derived column on an existing table [duplicate]在现有表上添加派生列[重复]
【发布时间】:2012-08-10 17:53:17
【问题描述】:

可能重复:
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(Date) = '12' 时。数百个帐户都以这种方式进行,大约还有 4 年的时间。我想在这个现有表中添加一列,名为“SummaryPreviousYear”。 SummaryPreviousYear 列应包含 MONTH(Date) = '12' 和上一年的金额之和。我想在帐号上加入此列,以便它位于“摘要”列旁边,并提供与“摘要”值一样的值。谁能帮我这个?我在这里拉头发。任何帮助将不胜感激。

【问题讨论】:

  • 在查看“2011-12-1”的摘要时,查询该帐户的“2010-12-1”信息是否不够?一个简单的“将年份减 1 并从该条目中获取摘要”类型的东西.. 为什么还有另一列?即使是当前的“摘要”列也是多余的。

标签: sql sql-server tsql calculated-columns


【解决方案1】:

假设[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

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

【讨论】:

  • 您缺少 AND DATEPART("mm" , a.[date] ) = 12
  • Matthew PK,谢谢,这个自联接查询提供了很多见解。但是,帐户和日期不是唯一的。有一个“位置”列。位置、帐户和日期的组合是唯一的。我得到了多余的值。 ://
  • 这是问题的编辑形式,包含所需的详细信息...对不起,我第一次没有包括它们sqlservercentral.com/Forums/Topic1343604-392-1.aspx?Update=1
  • @Deep 那么您只需JOIN 基于所有保证日期唯一性的值的行。您的原始请求未提及 location 列。
  • @Blam 这不是我理解的要求吗?我认为每一行应该具有上一年十二月的值,而不仅仅是当年十二月的值。
猜你喜欢
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 2014-09-20
  • 1970-01-01
  • 2018-10-30
  • 2021-02-03
  • 1970-01-01
相关资源
最近更新 更多