关于分组取最大数值

dctg2003 2009-07-22 09:39:28
今天碰到2张表
表A户主信息,表B个人信息
jtbh xm sfzhm zw hnzdrs
15001 张一 352101 工人 03
15002 李三 352105 农民 01
15003 王三 352106 工人 04
15004 赵三 352106 工人 05
。。。。。

grbh xm sfzhm zw
1500101 张一 352101 工人
1500102 张二 352102 农民
1500103 张三 352103 农民
1500201 李三 352105 农民
1500301 王三 352106 工人
1500302 王二 352107 工人
1500303 王六 352108 工人
1500304 王七 352108 工人
。。。。
个人编号是家庭编号后满取2位,我想通过表B取出户内最大人数更新到表A hnzdrs,请问该怎么写,新鸟求助..

...全文
146 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

IF OBJECT_ID('a') IS NOT NULL
DROP TABLE a
create table a
(
jtbh varchar(20),
xm varchar(20),
sfzhm int,
zw varchar(10),
hnzdrs int
)

insert into a
select '15001','线一','352101','工人',03 union all
select '15002','张二','352105','工人',01 union all
select '15003','王二','352106','工人',04 union all
select '15004','王六','352106','工人',05

IF OBJECT_ID('b') IS NOT NULL
DROP TABLE b
create table b
(
brbh varchar(20),
xm varchar(20),
sfzhm int,
zw varchar(10)
)

insert into b
select '1500101','张一',352101,'工人' union all
select '1500102','张二',352102,'农民' union all
select '1500103','张三',352103,'农民' union all
select '1500201','张三',352104,'农民' union all
select '1500301','王三',352105,'农民' union all
select '1500302','王二',352106,'农民' union all
select '1500303','王六',352107,'农民' union all
select '1500304','王七',352108,'农民'

update a set hnzdrs =
(select count(1) from b where left(brbh,5)=a.jtbh)

select * from a
/**
jtbh xm sfzhm zw hnzdrs
-------------------- -------------------- ----------- ---------- -----------
15001 线一 352101 工人 3
15002 张二 352105 工人 1
15003 王二 352106 工人 4
15004 王六 352106 工人 0

(所影响的行数为 4 行)
**/
dctg2003 2009-07-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wufeng4552 的回复:]
引用 10 楼 dctg2003 的回复:
以上语句在ORACLE无法运行,我想会不会是不支持的原因

建議到ORACLE問問
幫頂~~~~~
[/Quote]

谢谢!被这看起来很简单的搞的头大。。卡了1早上了- -
wsh236 2009-07-22
  • 打赏
  • 举报
回复
oracle 和 sql 有很多函数不一样的!修改一下!
水族杰纶 2009-07-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dctg2003 的回复:]
以上语句在ORACLE无法运行,我想会不会是不支持的原因
[/Quote]
建議到ORACLE問問
幫頂~~~~~
dctg2003 2009-07-22
  • 打赏
  • 举报
回复
以上语句在ORACLE无法运行,我想会不会是不支持的原因
dctg2003 2009-07-22
  • 打赏
  • 举报
回复
不知道为什么我这里一运行就出现,在from a 那里提示 SQL为正确结束。。
--小F-- 2009-07-22
  • 打赏
  • 举报
回复
update a 
set
hnzdrs =right(100+isnull(b.num,0),2)
from
a,(select grbh,count(1) as num from B group by grbh) b
where
b.grbh like a.jtbh+'%'
yangxuebao123 2009-07-22
  • 打赏
  • 举报
回复
update a
set hnzdrs =right(100+isnull(b.con,0),2)
from a
left join
(select grbh,count(1) as con from B group by grbh) b
on
b.grbh like
a.jtbh+'%'

结束了 啊
dctg2003 2009-07-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 roy_88 的回复:]
update a
set hnzdrs =right(100+isnull(b.con,0),2)
from a
left join
(select grbh,count(1) as con from B group by grbh)b on b.grbh like a.jtbh+'%'
[/Quote]
语句好像无法执行 未正确结束
dctg2003 2009-07-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wufeng4552 的回复:]
SQL code--tryupdate taset hnzdrs=(selectcount(*)from tbwhereleft(grbh,5)=ta.jtbh)
[/Quote]


这样无法取出最后2位,因为要把0也取出来,如果少的话只能取到1位!
中国风 2009-07-22
  • 打赏
  • 举报
回复
update a
set hnzdrs =right(100+isnull(b.con,0),2)
from a
left join
(select grbh,count(1) as con from B group by grbh)b on b.grbh like a.jtbh+'%'
仙道彰 2009-07-22
  • 打赏
  • 举报
回复
update a set hnzdrs=( select count(*) from b where left (grbh,5)=a.jtbh)
hrb2008 2009-07-22
  • 打赏
  • 举报
回复
select a.hnzdrs from a inner join (select left(grbh,5) as col from b where b.grbh='')as tb
on a.jtbh = b.col
水族杰纶 2009-07-22
  • 打赏
  • 举报
回复
--try
update ta set hnzdrs=(select count(*) from tb where left(grbh,5)=ta.jtbh)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧