我有下表
MyTable
:
id | name | phone | status1 | status2 | finalStatus
------------------------------------------------------
001 | Jack | 123456 | good | good | X
002 | Jack | 123456 | bad | good | X
003 | Jack | 123456 | bad | bad | X
004 | Other| 000000 | good | good | X
鉴于[name]
和[phone]
,如果[status1]
和[status2]
合适,则将[finalStatus]
更新为好。否则,将其他人更新为坏。
因此,给定Name=jack
和phone=123456
,我想要的结果表应如下所示
id | name | phone | status1 | status2 | finalStatus
-----------------------------------------------------
001 | Jack | 123456 | good | good | good
002 | Jack | 123456 | bad | good | bad
003 | Jack | 123456 | bad | bad | bad
004 | Other| 000000 | good | good | X
我做了一些研究,发现我可以在声明时使用案例来做。我尝试了以下代码,但它不起作用。
UPDATE [myTable]
SET finalStatus = (CASE
WHEN (status1 = 'Good' and status2 = 'Good')
THEN 'Good'
ELSE 'Bad'
END)
WHERE name = 'Jack' and phone = '123456'
更新
我的意思是"不起作用"上面是该行没有真正更新。但是,我只是弄清楚为什么它对我不起作用。这是非常愚蠢的,因为我使用了错误的表名(名称非常相似)。
但是,我尝试了以下代码
UPDATE [myTable]
SET finalStatus = (CASE
WHEN (status1 = 'Good' and status2 = 'Good' and name = 'Jack' and phone = '123456')
THEN 'Good'
ELSE 'Bad'
END)
上表中的第一行设置为' Good',这是正确的。但是,所有其他行都设置为坏。上面的代码有什么问题?我认为它与上面的第一个代码相同。
提前致谢。
答案 0 :(得分:0)
Try this
DECLARE @Mytable TABLE
(
id INT,
name VARCHAR(20),
phone INT,
status1 VARCHAR(10),
status2 VARCHAR(10),
finalStatus VARCHAR(10)
)
INSERT INTO @Mytable
VALUES ('001',
'Jack',
'123456',
'good',
'good',
'X'),
('002',
'Jack',
'123456',
'bad',
'good',
'X'),
('003',
'Jack',
'123456',
'bad',
'bad',
'X'),
('004',
'Other',
'000000',
'good',
'good',
'X')
SELECT *
FROM @Mytable
UPDATE @Mytable
SET finalStatus = ( CASE
WHEN status1 = 'good'
AND status2 = 'good' THEN 'good'
ELSE 'bad'
END )
WHERE name = 'jack'
AND phone = '123456'
SELECT *
FROM @Mytable