2014-10-28 130 views
1

我有以下表SQL語句 - 更新幾列不同的值,在某些條件

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=jackphone=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) 

在上表中被設定爲「良好」,這是正確的第一行。但是,所有其他行都設置爲壞。上面的代碼有什麼問題?我認爲它和上面的第一個代碼一樣。

在此先感謝。

+0

當您執行該語句時會發生什麼? – 2014-10-28 21:26:39

+1

如果您使用的是**區分大小寫**排序規則,那麼表格中包含「good」(全部小寫),並且您在檢查「Good」(使用大寫'G')可能會導致問題....如果你檢查'WHEN(status1 ='good'AND status2 ='good')' - 這會改變什麼嗎?它是否適用於這些檢查? – 2014-10-28 21:28:40

+0

「我嘗試了下面的代碼,但它不起作用」,你能解釋一下「不起作用」的意思嗎? – Lamak 2014-10-28 21:30:06

回答

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