当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语句怎么写,求问,实在想不出来,百度也百度不出来,谢谢


...全文
145 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
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 

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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