分享

sql统计表2相同数据的总数写进表1中

 happyngkmw 2013-03-08

sql统计表2相同数据的总数写进表1中

2011-10-04 15:15提问者: backpack_123 |浏览次数:397次
1、表一 为销售汇总库 有 BH(编号),SL(数量)  编号 是关键字 且各编号是唯一的。
2、表二 为销售流水库 有 BH(编号)  编号 是关键字 且有许多条编号相同且数量不同的记录。
这个“多对一更新”的sql语句如何写呀,请高手指教!
例如:
表1: 表2:
编号 数量 编号
001 3 001
002 2 001
001
002
002

问题补充:

我用的是 SQL Server
 
满意回答
2011-10-05 11:42
 
 
这要看你的数据库,有些数据库不允许对分组函数update(例如Access)
如果允许的话 update 表1 t set t.数量 = (select count(*) from 表2 where 编号=t.编号)
如果你用Access的话要这样写:
select 编号, count(*) as 数量 from 表2 group by 编号 into tmp;
update 表1 inner join tmp on 表1.编号=tmp.编号 set 表1.数量=tmp.数量;
drop table tmp;
----------------------------------------------
 
类似的问题的答案:
两个都写上:
CREATE CURSOR 表2 ( bh i, sl i)
INSERT INTO 表2 VALUES ( 1, 20)
INSERT INTO 表2 VALUES ( 2, 10)
INSERT INTO 表2 VALUES ( 3, 30)
INSERT INTO 表2 VALUES ( 4, 40)
INSERT INTO 表2 VALUES ( 5, 50)
INSERT INTO 表2 VALUES ( 6, 60)
INSERT INTO 表2 VALUES ( 1, 20)
INSERT INTO 表2 VALUES ( 2, 10)
INSERT INTO 表2 VALUES ( 3, 30)
INSERT INTO 表2 VALUES ( 4, 40)
INSERT INTO 表2 VALUES ( 5, 50)
INSERT INTO 表2 VALUES ( 6, 60)
INSERT INTO 表2 VALUES ( 8, 60)


CREATE CURSOR 表1 ( bh i, n_sl i)
INSERT INTO 表1 VALUES ( 1, 0)
INSERT INTO 表1 VALUES ( 2, 0)
INSERT INTO 表1 VALUES ( 3, 0)
INSERT INTO 表1 VALUES ( 4, 0)
INSERT INTO 表1 VALUES ( 5, 0)
INSERT INTO 表1 VALUES ( 7, 1)

UPDATE 表1 SET N_SL = a.sl from (SELECT bh, count(*) sl FROM 表2 a GROUP BY a.bh) a WHERE 表1.bh=a.bh
brow
UPDATE 表1 SET N_SL = a.sl from (SELECT bh, sum(sl) sl FROM 表2 a GROUP BY a.bh) a WHERE 表1.bh=a.bh
brow
-------------------------------------------------------------------------------
11楼
引用
你知道你上面那句有啥影响么?。。。
数据一多 你全部UPDATE?对UPDATE不过滤 反而对UPDATA的结果过滤?
倘若原来那表1 的数量原来就有值 ,且某个BH不存在于表2 ,你直接也把他UPDATE为0?

说得太对了,那就再修正一下:
update 表1 set n_sl = (select sum(n_sl) from 表2 where bh = 表1.bh);
where bh in (select bh from 表2)
---------------------------------------------
8楼
update 表1 set n_sl = (select sum(n_sl) from 表2 where bh = 表1.bh)
这应该是最简捷的吧.

----------------------------------------------------------------
5楼
update table1 set table1.n_sl=b.sl from table1 a,(select bh,sum(sl) as  sl from table2 group by bh) b where a.bh=b.bh

-----------------------------------------------------------------------------

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多