再次询问

wnsr 2014-09-25 02:55:18
http://bbs.csdn.net/topics/390894356
create table ryb (dah varchar(10),xm varchar(10),sm varchar(10))
insert into ryb
select '430214','张三',null union all
select '123456','张三',null union all
select '5245','张三',null union all
select '14879','李四',null union all
select '45123','李四',null

我要更新姓名相同其中(dah)最长的那条数据且最长之中(最大)的某个字段的sm值为'最长' ,又该怎么写这语句?
例如dah为'430214',更新sm='最长',
dah为'45123',更新sm='最长',其它的sm不更新
(即多了要查出最大的那个)
...全文
129 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hleb231 2014-09-25
  • 打赏
  • 举报
回复

上面没看清要分组,楼上两位的写法简单,只是提供一下别的写法
update #temp
set sm='最长'
from
(select  MAX(dah) dah from  #temp a where len(dah)in(select  max(len(dah)) from #temp group by XM) 
group by xm) a
where #temp.dah =a.dah
hleb231 2014-09-25
  • 打赏
  • 举报
回复

再一种
update  ryb
set sm='最长'
from
(select  top 1 * from  ryb a where len(dah)=(select  max(len(dah)) from  ryb ) 
order by dah desc)a
where ryb.dah =a.dah
沉默肥牛 2014-09-25
  • 打赏
  • 举报
回复

WITH a AS (
SELECT ROW_NUMBER()OVER(PARTITION BY xm ORDER BY CAST(dah AS INT)desc) id,* FROM ryb
)
UPDATE ryh SET sm='最长' WHERE dah IN (SELECT dah FROM a WHERE id=1)
xiaodongni 2014-09-25
  • 打赏
  • 举报
回复


  update t  set sm='最长'
  from  
 ( select * ,
  row_number()over(partition by  xm order by len(dah) desc,dah desc)as n from  ryb ) t
  where n=1

34,587

社区成员

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

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