日期:2014-05-18  浏览次数:20526 次

SQL难句,字段值更新
如图:表1
  ID MONTH [1] [2] [3] [4]
  1 1 A B C D  
  2 1 A B C D  
  3 1 A B C D  
  4 2 A B C D  


 表2
  ID MONTH 字段值 Value
  1 1 1 E
  4 2 3 F

怎样可以跟据表1,跟表2的ID,MONTH关连,修改 表1中字段值为[1]字段改成E。。。
结果:
ID MONTH [1] [2] [3] [4]
 1 1 E B C D  
 2 1 A B C D  
 3 1 A B C D  
 4 2 A B F D

 

------解决方案--------------------
SQL code
if not object_id('t1') is null
    drop table t1
Go
Create table t1([ID] int,[MONTH] int,[1] nvarchar(1),[2] nvarchar(1),[3] nvarchar(1),[4] nvarchar(1))
Insert t1
select 1,1,N'A',N'B',N'C',N'D' union all
select 2,1,N'A',N'B',N'C',N'D' union all
select 3,1,N'A',N'B',N'C',N'D' union all
select 4,2,N'A',N'B',N'C',N'D'
Go
if not object_id('t2') is null
    drop table t2
Go
Create table t2([ID] int,[MONTH] int,[字段值] int,[Value] nvarchar(1))
Insert t2
select 1,1,1,N'E' union all
select 4,2,3,N'F'
Go
update t1
set [1]=case when [字段值]=1 then [Value] else [1] end,
    [2]=case when [字段值]=2 then [Value] else [2] end,
    [3]=case when [字段值]=3 then [Value] else [3] end,
    [4]=case when [字段值]=4 then [Value] else [4] end
from t2
where t1.ID=t2.ID and t1.[MONTH]=t2.[MONTH]
select *
from t1
/*
ID          MONTH       1    2    3    4
----------- ----------- ---- ---- ---- ----
1           1           E    B    C    D
2           1           A    B    C    D
3           1           A    B    C    D
4           2           A    B    F    D

(4 row(s) affected)
*/

------解决方案--------------------
SQL code

declare @表2 table (ID int,MONTH int,字段值 int,Value varchar(1))
insert into @表2
select 1,1,1,'E' union all
select 4,2,3,'F'

select 
'update 表1 set ['+ltrim(字段值)+']='''+
Value+''' where ID='+ltrim(ID)+' and MONTH='+ltrim(Month) from @表2

/*
update 表1 set [1]='E' where ID=1 and MONTH=1
update 表1 set [3]='F' where ID=4 and MONTH=2
*/