帮忙写一条update语句

wudiqiang2047 2010-04-07 02:42:02
id name pid class
----------- -------------------------------------------------- ----------- -----------
262152 1 NULL NULL
262153 NULL 2 NULL
262154 3 NULL NULL
262155 NULL 4 NULL
262156 5 NULL NULL
262157 NULL 6 NULL
262158 7 NULL NULL
262159 NULL 8 NULL
262160 NULL NULL 9
262161 10 NULL NULL
262162 NULL NULL 11
262163 NULL 12 NULL
262164 NULL NULL 13

目前数据格式是这样的 我想用一条更新语句将数据变成
id name pid class
----------- -------------------------------------------------- ----------- -----------
262152 1 NULL NULL
262153 2 2 NULL
262154 3 NULL NULL
262155 4 4 NULL
262156 5 NULL NULL
262157 6 6 NULL
262158 7 NULL NULL
262159 8 8 NULL
262160 9 NULL 9
262161 10 NULL NULL
262162 11 NULL 11
262163 12 12 NULL
262164 13 NULL 13

我自己写了一条 可是不对
update steel_cs set [name]=(select isnull([name],isnull(pid,class)) from steel_cs where id=steel_cs.id)

请问怎么写
...全文
90 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin717399708 2010-04-07
  • 打赏
  • 举报
回复
(13 行受影响)
htl258_Tony 2010-04-07
  • 打赏
  • 举报
回复
--------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-04-07 15:00:56
-- Version:Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86)
-- Mar 29 2009 10:27:29
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
--------------------------------------------------------------------------
--> 生成测试数据表:tb

IF NOT OBJECT_ID('[tb]') IS NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb]([id] INT,[name] NVARCHAR(10),[pid] NVARCHAR(10),[class] NVARCHAR(10))
INSERT [tb]
SELECT 262152,'1',NULL,NULL UNION ALL
SELECT 262153,NULL,'2',NULL UNION ALL
SELECT 262154,'3',NULL,NULL UNION ALL
SELECT 262155,NULL,'4',NULL UNION ALL
SELECT 262156,'5',NULL,NULL UNION ALL
SELECT 262157,NULL,'6',NULL UNION ALL
SELECT 262158,'7',NULL,NULL UNION ALL
SELECT 262159,NULL,'8',NULL UNION ALL
SELECT 262160,NULL,NULL,'9' UNION ALL
SELECT 262161,'10',NULL,NULL UNION ALL
SELECT 262162,NULL,NULL,'11' UNION ALL
SELECT 262163,NULL,'12',NULL UNION ALL
SELECT 262164,NULL,NULL,'13'
GO
--SELECT * FROM [tb]

-->SQL查询如下:
update tb set name=ISNULL(name,isnull(pid,'')+ISNULL([class],''))

select * from tb
/*
id name pid class
----------- ---------- ---------- ----------
262152 1 NULL NULL
262153 2 2 NULL
262154 3 NULL NULL
262155 4 4 NULL
262156 5 NULL NULL
262157 6 6 NULL
262158 7 NULL NULL
262159 8 8 NULL
262160 9 NULL 9
262161 10 NULL NULL
262162 11 NULL 11
262163 12 12 NULL
262164 13 NULL 13

(13 行受影响)
*/
--小F-- 2010-04-07
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2010-04-07 14:58:01
-- Verstion:
-- Microsoft SQL Server 2005 - 9.00.4053.00 (Intel X86)
-- May 26 2009 14:24:20
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([id] int,[name] int,[pid] int,[class] int)
insert [tb]
select 262152,1,null,null union all
select 262153,null,2,null union all
select 262154,3,null,null union all
select 262155,null,4,null union all
select 262156,5,null,null union all
select 262157,null,6,null union all
select 262158,7,null,null union all
select 262159,null,8,null union all
select 262160,null,null,9 union all
select 262161,10,null,null union all
select 262162,null,null,11 union all
select 262163,null,12,null union all
select 262164,null,null,13
--------------开始查询--------------------------
update
a
set
name=b.id0
from
tb a,
(select *,id0=row_number()over(order by id) from tb)b
where
a.id=b.id

select * from tb
----------------结果----------------------------
/* id name pid class
----------- ----------- ----------- -----------
262152 1 NULL NULL
262153 2 2 NULL
262154 3 NULL NULL
262155 4 4 NULL
262156 5 NULL NULL
262157 6 6 NULL
262158 7 NULL NULL
262159 8 8 NULL
262160 9 NULL 9
262161 10 NULL NULL
262162 11 NULL 11
262163 12 12 NULL
262164 13 NULL 13

(13 行受影响)

*/
nianran520 2010-04-07
  • 打赏
  • 举报
回复
update steel_cs 
set name = isnull(pid,class)
where name is null
永生天地 2010-04-07
  • 打赏
  • 举报
回复
update steel_cs
set [name]= isnull(pid,class)
where [name] is null
东那个升 2010-04-07
  • 打赏
  • 举报
回复
update tb
set name=isnull(pid,class)
where name is null
realclimax 2010-04-07
  • 打赏
  • 举报
回复
再加一句:update steel_cs set [name]=class where class is not null and [name] is null
realclimax 2010-04-07
  • 打赏
  • 举报
回复
update steel_cs set [name]=pid where pid is not null and [name] is null

22,207

社区成员

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

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