2012-08-03 25 views
0

我有一張這樣的桌子。用戶名和不同的技能都設置爲0,每次表被重新創建(每天一次)(用戶名和技能,以6)帶有CASE和JOIN的更新

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 

所以,我要做的就是加入表(按用戶名)和更新表1與此規則。 如果表2中的Sill表示(In Unre)表1中的S1應該變爲TRUE(1),如果表2中的Skill表示In Kit,表1中的S2應該變爲TRUE,等等。

只要我知道我會使用帶有案例的更新,但是我無法將連接放在兩個表中。

任何想法?謝謝。

+0

使用SQL小提琴顯示您的示例:http://sqlfiddle.com/ – 2012-08-03 12:30:04

回答

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