当前位置: 首页 > 面试题库 >

SQL如何更新同一表中组上方的列的SUM

丁阎宝
2023-03-14
问题内容

我有一个类似于以下内容的(SQL Server)表:

销售摘要

2013      1          Jim             $10                  ??

2013      1         Anna            $0                   ??

2013      2         John             $8                   ??

2013      3        Todd              $4                   ??

2013      3        Alan               $1                   ??

2014      3        Alan              $22                  ??

我试图对这个示例SalesSummary表进行汇总,然后将正确的值插入“团队销售”列中。在此示例中,我希望第一列和第二列中的金额为10美元,第三列中的金额为8美元,第四列/
5位的金额为5美元,第六列的插槽为22美元。原谅我对SQL的无知,但是我决定告诉我一个糟糕的解决方案,如下所示:

UPDATE SalesSummary SET TeamSales = sum.TeamSales
FROM (SELECT Team, Year, SUM(PersonSales) OVER (Partition By Team, Year) as TeamSales)
      FROM SalesSummary
      GROUP BY Team, Year, PersonSales
     ) AS sum, SalesSummary as SS
WHERE sum.Team = ss.Team AND sum.Year = ss.Year

我希望有人能够证明如何最好地执行这种类型的更新。我感谢任何帮助,技巧或示例。道歉,如果这是显而易见的。


问题答案:

假设您正在使用SQL Server,我认为您需要这样的东西:

WITH toupdate AS
     (SELECT team, year, 
             Sum(personsales) OVER (partition BY team, year) AS newTeamSales 
      FROM salessummary
     ) 
UPDATE toupdate 
   SET teamsales = newteamsales;

您的原始查询存在多个问题和可疑的结构。首先,聚合子查询不可更新。其次,您正在进行聚合,并且使用窗口功能(尽管允许)与众不同。第三,你被聚集PersonSales,并采取sum()。再次允许,但不寻常。



 类似资料:
  • 问题内容: 我正在尝试用TYPE2中找到的值覆盖TYPE1中找到的值。 我编写了此SQL进行尝试,但是由于某种原因它没有更新: http://www.sqlfiddle.com/#!3/a4733/17 为什么我的TYPE1中的值没有更新? 问题答案: 这对我有用

  • 问题内容: 我需要根据从以下两个表中提取的数据创建一个新表: 第一表: 第二张表: 新表应包含一个“ Var”列和一个“Number”列,其中每个变量将包含一行带有cur_number的行,其余各行将包含第二个表的new_number列中的数字,其中。例如,在上面显示的示例中,对于A,将有一行,行数为10(其cur_number),另一行为“ 2”(因为2 <10,但是11>10)。 在我的示例中

  • 问题内容: 这可能是更多的设计问题,但是我希望没有太多的伏都教徒是有可能的。 假设我有一个像这样的表: 我想得到这样的东西(ID在列中分组): 这可能吗?我已经尝试过以下查询… …但是我只得到公共节点: 我也尝试过在JOIN ON和WHERE上玩,但是似乎无法获得预期的结果。 我在网上可以找到的最接近的问题是这个,但我也无法使UNION正常工作。 性能不是问题,我可以假设只有2个小组。 有任何想法

  • 更改或重置此栏目的最佳方法是什么?

  • 问题内容: 我需要将一个列的数据插入同一表中的另一列。 有人可以告诉我该怎么写吗? 谢谢 问题答案:

  • 问题内容: 我写了一个具有以下查询的SQL脚本。查询工作正常。 但是现在,我不想在查询本身中编写大约100个名称,而是要从CSV文件中获取所有名称。我在互联网上读到有关SQL * Loader的信息,但在更新查询上却得不到很多。我的csv文件仅包含名称。 我试过了 我怎样才能做到这一点?提前致谢。 问题答案: SQL * Loader不执行更新,仅执行插入。因此,您应该将名称插入一个单独的表(例如