参考图片:
我有一个成员列表,每个成员都有一个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
答案 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