【问题标题】:SQL Sum and grouping with conditionSQL Sum 和分组条件
【发布时间】:2017-01-27 02:37:00
【问题描述】:

我有一个包含序列的表格,并为每个项目计数。我正在尝试提出一个在结果中添加额外列的查询,这样在新列中,每一行/项目将具有所有项目计数的总和,其序列低于该项目。

例如:

items   [...]   seq    counts
a       [...]    1       1
b       [...]    2       1
c       [...]    3       8
d       [...]    4       2
a       [...]    1       1
e       [...]   null     1

结果:

items   [...]   seq    counts  sum
a       [...]    1       1   (doesnt matter, could be 0 or 1)
b       [...]    2       1      1
c       [...]    3       8      2
d       [...]    4       2     10
a       [...]    1       1   (doesnt matter, could be 0 or 1)
e       [...]   null     1   (doesnt matter)
f       [...]    5       10    12

我不知道如何用这样的条件总结一些事情。我只知道如何分组并总结一个组中的所有项目。子查询也不适合我

【问题讨论】:

  • 首先,第 6 行 a .. 1 1 是如何排在第 6 位的?您是否正在使用一些订单?如果这第 6 行是第 2 行怎么办?你的结果会改变吗?
  • 实际上它是一个巨大的表,有很多连接,所以有重复项、seq、counts 和 sum 组合的行,[...] columnS 包含使每一行独一无二的内容。桌子也没有排序
  • 有一个条件你没有提到。第1行和第5行seq==1(即<2)那么为什么第2行seq==2sum==1根据要求:“将具有序列低于该项目的所有项目计数的总和" 它应该有sum==2

标签: sql sql-server database


【解决方案1】:

您正在寻找累积金额。您可以使用outer apply

select t.*, t2.sumcounts
from t outer apply
     (select sum(t2.counts) as sumcounts
      from t t2
      where t2.seq < t.seq
     ) t2;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 2013-03-16
    相关资源
    最近更新 更多