用CASE和JOIN更新

时间:2012-08-03 12:26:05

标签: sql-server-2008

我有一张像这样的桌子。每次重新创建表时,UserName和不同的技能都设置为0(每天一次)(UserName和Skills to 6)

UserName    S1      S2      S3      S4      S5      S6
MATTHEWS    0       0       0       0       0       0
FOREMANE    0       0       0       0       0       0
CASTORP     0       0       0       0       0       0
RODNEYR     0       0       0       0       0       0

...

另一张表。

UserName    Skill
MAITAA      In Unre
PORTALAL    Out TLG (Kit)
NAVAROLEO   In Kit

所以,我要做的是使用此规则将表(通过UserName)和UPDATE表1连接起来。 如果表2中的Sill表示(In Unre)表1中的S1应更改为TRUE(1),如果表2中的技巧说In Kit,表1中的S2应更改为TRUE等。

据我所知,我会在案例中使用更新,但是我无法将联接放到两个表中。

任何想法?感谢。

1 个答案:

答案 0 :(得分:1)

试试这个:

这里我试图只更新S!和S2基于规则中的值。同样,您可以添加更多表1列

CREATE TABLE test6(UserName varchar(10),S1 int,S2 int,S3 int,S4 int,S5 int,S6 int)
INSERT INTO test6
VALUES('MATTHEWS',0,0,0,0,0,0),
('FOREMANE',0,0,0,0,0,0),
('CASTORP',0,0,0,0,0,0),
('RODNEYR',0,0,0,0,0,0)

select * from test6

create table test7(UserName varchar(20),Skill varchar(50))
INSERT INTO test7
VALUES('MATTHEWS','In Unre'),
('PORTALAL','Out TLG (Kit)'),
('NAVAROLEO','In Kit')

update t1 SET t1.S1 = CASE WHEN t2.Skill='In Unre' then 1 else 0 end,
              t1.S2 = CASE WHEN t2.Skill='In Kit'  then 1 else 0 end 
from test6 t1 inner join test7 t2
on t1.UserName = t2.UserName