SUM上线下线点可创建组总计-SQL

时间:2018-06-21 20:16:17

标签: sql sql-server

参考图片:

我有一个成员列表,每个成员都有一个ID以及根据层次结构最远的下线的Seq#和Max Seq编号。每个成员都有自己的观点。我需要能够根据个人得分生成总计的下线得分。

从本质上讲,将特定成员的seq#和最大Downline Seq之间的任何人的所有个人积分加起来,并在另一列上称为“组积分”。

在图像中,成员ID 1206740(倒数第三)将拥有280.26个个人积分,以及ID 372549(倒数第二个)和33675(最后一个)的个人积分,因为它们的个人序列号介于ID的中间1206740 Seq#和最大下行Seq#。因此,共有1,477.39个下线积分,和1757.65个组积分。

我有以下内容并不能真正起作用,因为它为个人和团体提供了相同的观点

SELECT 

    ID, 
    PERSONAL_POINTS,
    SUM (CASE 
            WHEN SEQ_NO BETWEEN SEQ_NO AND MAX_DWNLN_SEQ_NO
            THEN PERSONAL_POINTS 
            ELSE 0 
        END) GROUP_POINTS


FROM 
    points

GROUP BY 
    ID, 
    PERSONAL_POINTS

1 个答案:

答案 0 :(得分:0)

正如LukStorms指出的那样,您的case语句将始终返回Personal_Points。

我认为您想做的就是将该表本身连接起来。

也许尝试:

select 
  P1.ID,
  P1.Personal_Points,
  sum(P2.Personal_Points) Group_Points
from Points P1
inner join Points P2 on P1.Seq_No between P2.Seq_No and P2.Max_Dwnln_Seq_no
group by 
  P1.ID, P1.Personal_Points

编辑:概念验证

create table #temp (id int, seq_no int, max_seq_no int, points decimal (10,2))
insert into #temp (id, seq_no, max_seq_no, points) values(1841287,97,112,0)
insert into #temp (id, seq_no, max_seq_no, points) values(1841289,120,131,233.48)
insert into #temp (id, seq_no, max_seq_no, points) values(18409596,388,599980,76822.22)
insert into #temp (id, seq_no, max_seq_no, points) values(61,599981,727456,2.4)
insert into #temp (id, seq_no, max_seq_no, points) values(1206740,602811,606419,280.26)
insert into #temp (id, seq_no, max_seq_no, points) values(372549,602813,602959,37.04)
insert into #temp (id, seq_no, max_seq_no, points) values(33675,603002,605076,1440.35)



select 
  P1.ID,
  P1.Points,
  sum(P2.Points) Group_Points
from #temp P1
inner join #temp P2 on P1.Seq_No between P2.Seq_No and P2.max_seq_no
group by 
  P1.ID, P1.Points


drop table #temp