SQL如何计算某一列在另外一个表的出现次数,然后更新该值出现的次数

如表score中,有对应的两列
person no
a 1
b 2
c 3
a 2
b 2
另外一个表sum则是汇总
person total
a 3
b 4
c 3
其中score的no值要统计到sum的total中

给你举个例子,就只用这两个字段吧,其他的也没多大用
PKId ParentId
1 0
2 0
3 1
4 2
5 1

假设数据是我上边这样的
可以假设每个PKId分别为商品大类,就把1的定义为软件吧,2定义为硬件,3为硬盘,4为ps软件,5为主板

这样的话,你就能看出对应关系了吧?
1和2是最高层的,所以无父节点,所以ParentId为0
3和5都是硬件,所以归属为1
4为软件,所以归属为2
这样的好处是减少多次读取其他表里的无用信息,在一定程度上可以提高效率,当然是指数据量大的时候,数据量小的时候基本没什么区别
作用你自己都说了,其实就是实现自我关联

但是这样有一点不好,在自身有主键外键,如果其中的逻辑关系弄的不太清楚的话,很容易出问题,简单来说就是这样了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-01-30
--试着这样做, 把这个Update加到可能修改到表Score的地方去
update b
set total = a.no
from (select person, sum(no) no from [score] group by person) a
join [sum] b on a.person = b.person
第2个回答  2012-01-31
truncate table sum

insert into sum
select person, sum(no) as total
from score
group by person
第3个回答  2012-01-30
看了5分钟都没有看明白问题,您是想要得到sum表这样的结果,并且每一次score中新增数据之後都改变sum表的结果么?追问

是的,如果score表中的数值出现变化,就可以update sum表中的total。因为score中的数值是不断追加的,这样需要更新的时候就会更改total中的值。

追答

select person,sum(no) as total from score group by person
难道是这样?

追问

查询出来的没有问题,如何确保每个更新的结果都正确?另外查询出来会有一个空值包含总计的,这个如何去掉?

相似回答