当a字段一致时,b字段部分有值(值相同)部分为空,如何把空的填上,求问谢谢!

gudigudi 2015-12-01 11:22:43
各路大侠好,问题是这样的,一个sqlserver表table里有包括a字段,b字段。

a字段的值是人名,比如小红、小明等,b字段的值是对应的存款钱数。a、b字段的类型都是nvarchar
a字段值相同的可能有好几条,比如
a字段的值都是小红,而对应的b字段的值有一些是100,有一些是空值(null)
当a字段是小明时,b字段全部是null,
a字段的值都是小兰,而对应的b字段的值有一些是300,有一些是空值(null)
如下图

a b
小红 100
小红 null
小红 null
小红 null
小红 100
小红 null
小明 null
小明 null
小兰 300
小兰 null

想做的就是,把小红对应的b全部改成100,小兰对应的b全部改成300,即去掉空值。小明改不了,因为全是null,还是保留

这样的sql语句怎么写,求问,实在想不出来,百度也百度不出来,谢谢


...全文
88 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Tiger_Zhao 2015-12-01
DECLARE @t TABLE(id int identity,a nvarchar(4),b nvarchar(4))

INSERT INTO @t
SELECT N'小红',N'100' UNION ALL
SELECT N'小红',NULL UNION ALL
SELECT N'小红',NULL UNION ALL
SELECT N'小红',NULL UNION ALL
SELECT N'小红',N'100' UNION ALL
SELECT N'小红',NULL UNION ALL
SELECT N'小红',NULL UNION ALL
SELECT N'小明',NULL UNION ALL
SELECT N'小明',NULL UNION ALL
SELECT N'小兰',N'300' UNION ALL
SELECT N'小兰',NULL

;WITH s AS ( -- 假定每个a的非空b值都相等
SELECT DISTINCT a,b
FROM @t
WHERE b IS NOT NULL
)
UPDATE @t
SET t.b = s.b
FROM @t t, s
WHERE t.a = s.a

SELECT * FROM @t

         id a    b
----------- ---- ----
1 小红 100
2 小红 100
3 小红 100
4 小红 100
5 小红 100
6 小红 100
7 小红 100
8 小明 NULL
9 小明 NULL
10 小兰 300
11 小兰 300
回复
Yole 2015-12-01

update x  set x.b= y.b

from table1 x left join 
(
Select a,MAX(b) b from table1 group by a
)
y on x.a=y.a
回复
gudigudi 2015-12-01
2楼你好,a字段不止小红,小明,小兰怎么写呢?谢谢
回复
Yole 2015-12-01
小兰、小明、傻傻分不清楚~~~
回复
Yole 2015-12-01

update table1 set b= 
case when a='小红' then  100 
when a='小兰' then  300 else   b end 
from table1 
回复
Yole 2015-12-01

update table1 set b= 
case when a='小红' then  100 
when a='小明' then  300 else   b end 
from table1 
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-12-01 11:22
社区公告
暂无公告