SQL server 2012怎么从有相同ID号的那条信息中取用有用的信息放到和它有相同ID的行中呢?

SQLserver2012怎么从有相同ID号的那条信息中取用有用的信息放到和它有相同ID的行中呢?例如:ID身高年龄序号112178202131183224有的ID相同表... SQL server 2012怎么从有相同ID号的那条信息中取用有用的信息放到和它有相同ID的行中呢?例如:
ID 身高 年龄 序号
1 1
2 178 20 2
1 3
1 183 22 4

有的ID相同表示是同一个人身高和年龄是相同的,但是同一个ID号的好多没有身高和年龄比如第一行、第三行和第四行有相同的ID证明他们是同一个人,有相同的身高和年龄,我怎么能在SQL server2012中把有相同ID的身高和年龄赋值给那些有相同ID但是身高和年龄为空的那些呢?
说得有点乱。总之就是要把第四行中的身高和年龄值赋给ID为和它相同的那些身高和年龄为空的那些就像第一行和第三行似的。
求具体操作方法,最详细越好!拜托!这只是举个例子,其实数据量很大的
展开
 我来答
WANGXIUXIU2010
推荐于2016-08-01 · TA获得超过2724个赞
知道小有建树答主
回答量:224
采纳率:50%
帮助的人:184万
展开全部

如果数据量 大的话,可以用循环来做。

一、我建议先取出身高和年龄不为空的数据,按ID排序。

二、通过游标去更新相同ID的身高和年龄。

三、具体sql。

declare @height varchar(3) 
declare @age varchar(3)
declare @ID varchar(4)
declare cur cursor for 
  select 身高,年龄,ID from A表 order by ID where 身高!='' and 身高 is not null
open cur
fetch next from cur into @height,@age,@ID
while @@fetch_status = 0   
begin 
    update A set 身高=@height,年龄=@age where ID=@ID 
fetch next from cur into @height,@age
end
追问
或者说有A、B 两张表,有相同的ID值。A表中身高和年龄为空。如何将B表中的身高和年龄的信息按照各自相同的ID赋值给A表中呢。谢谢!!!!!!
追答

上面还没写完。既然是另一个表,那我就改一下句子。

declare @height varchar(3) 
declare @age varchar(3)
declare @ID varchar(4)
declare cur cursor for 
  select 身高,年龄,ID from B order by ID --取出B表中要用的数据
open cur
fetch next from cur into @height,@age,@ID  --取出一条记录
while @@fetch_status = 0   
begin 
    update A set 身高=@height,年龄=@age where ID=@ID --一将这条记录根据ID更新到A
fetch next from cur into @height,@age
end
close cur 
deallocate cur --释放游标

 游标是邪恶的,看着还比较麻烦,其实就是个循环,但是占资源。可以尽量不用。

楼下twvampire的方式就挺好。

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
twvampire
2015-04-17 · TA获得超过3620个赞
知道大有可为答主
回答量:3029
采纳率:76%
帮助的人:2982万
展开全部

如果你的数据只是像你写的这样

update t1 set t1.b=t2.b,t1.c=t2.c
from test t1 inner join (select a,max(isnull(b,0)),max(isnull(c,0))
                                      from test
                                      group by a) t2 on t1.a=t2.a
where isnull(b,0)=0 and isnull(c,0)=0

注:
ID   =a      身高=b         年龄=c

这样就可以了;

 

楼下 ab594418159 的方式也可行,直接子查询查询出b,c为空的就可以了,,

 

游标的方式,,还是算了

追问
太谢谢您了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
石头0123
2015-04-17 · 超过93用户采纳过TA的回答
知道小有建树答主
回答量:274
采纳率:100%
帮助的人:68万
展开全部
查询出所有身高年龄不为空的数据 select * from tab where 身高<>'' and 身高 is not null
更新空的数据 update tab set tab.身高=T.身高,tab.年龄=T.年龄 from tab,(上面的语句) T where tab.id=T.id
追问
谢谢您
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
来学习的DBA
2015-04-17 · TA获得超过298个赞
知道小有建树答主
回答量:369
采纳率:0%
帮助的人:209万
展开全部
如果你相同ID的数据是唯一的话我有个 本方法确实可行;
update tableName set height=(select height from tableName where tableName.id=?
and tableName.height is not null),
age=(select age from tableName where tableName.id=?
and tableName.age is not null
) where ID=?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
腾飞yyds
2015-04-17 · TA获得超过451个赞
知道小有建树答主
回答量:587
采纳率:50%
帮助的人:259万
展开全部
用update试试吧

update t set from(select * from tablename) as t where 身高='' or 年龄=''
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式