with query1 do
begin
close;
sql.clear;
sql.add('select * from youtable');
first;
combobox1.clear;
with combobox1.items do
begin
wile not (qeury1.eof) do
begin
add(fieldbyname('id').asstring);
next;
end;
end;
end;
=====================关键====================
combobox1onchange
begin
with query1 do
begin
close;
sql.clear;
sql.add('select 点数 from youtable where ID = :ID');
parambyname('ID').asstring(asInteger):=combobox1.text(Strtoint(combobox1.text));
open;
end;
with query2 do
begin
close;
sql.clear;
sql.add('select 点数 from youtable where 上级ID = :value ');
parambyname('上级ID').asstring(asInteger) :=combobox1.text;
open;
end;
end;
计算:
begin
result := 0;
query2.first;
with query2 do
beign
while not (query2.eof) do
begin
result := result + (query1.fieldbyname('点数').asfloat-fieldbyname('点数').asfloat);
Next;
end;
end;
//你自己试一下,我没有数据,也无法调式;
result := query1.fieldbyname('点数')
只统计直接从属的节点吗?
Select ID, Sum(PointSub)
From
(Select PrimTab.ID as ID,PrimTab.点数-SecTab.点数 as PointSub
from MyTab PrimTab,MyTab SecTab
Where PrimTab.ID = SecTab.上级ID
)
//Where ID = 2
Group By ID
建议把子查询先写成一个视图。
____ ____
\ p \ / g /
\ l \_/ n /
\ a o /
\ i s /
\ n /
\_/
我用了好长时间帮你调出了一个算法,用一句话实现你的要求。
假设你的表名为TreeNodes,先增加一个字段“点数差”,然后执行下面的SQL语句
update treenodes set 点数差=
(select count(*) from Treenodes Q where Q.上级ID=treenodes.ID)*点数-
(select Sum(点数) from Treenodes P where P.上级ID=treenodes.ID group by 上级ID )