2016-01-21 19 views
-1

我收到一個錯誤:'您的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以找到在HAVING(SUM(CASE WHEN PTSD2E_1 IS NULL THEN 1 ELSE 0 END))+ SUM(CASE WHEN PTSD2E_2'at line 3')時嘗試運行此更新語句,如果有少於2個缺失值,則該語句嘗試使用總和線(如PTSD_Total)的結果更新表。該代碼在作爲SELECT運行時工作。PTSD_Total列作爲tinyint存在於表中值很小),這是目前用空值填充。在察覺我的錯誤認識任何幫助。使用sum和case不工作更新同一表

UPDATE mytablename 
    SET PTSD_Total = ((SUM(IFNULL(PTSD2E_1,0)))+(SUM(IFNULL(PTSD2E_2,0)))+ 
(SUM(IFNULL(PTSD2E_3,0)))+(SUM(IFNULL(PTSD2E_4,0)))+ 
(SUM(IFNULL(PTSD2E_5,0)))+(SUM(IFNULL(PTSD2E_6,0)))+ 
(SUM(IFNULL(PTSD2E_7,0)))+(SUM(IFNULL(PTSD2E_8,0)))+ 
(SUM(IFNULL(PTSD2E_9,0)))+(SUM(IFNULL(PTSD2E_10,0)))) 
    HAVING (SUM(CASE WHEN PTSD2E_1 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN 
PTSD2E_2 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN PTSD2E_3 IS NULL THEN 1 
ELSE 0 END)+SUM(CASE WHEN PTSD2E_4 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN 
PTSD2E_5 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN PTSD2E_6 IS NULL THEN 1 
ELSE 0 END)+SUM(CASE WHEN PTSD2E_7 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN 
PTSD2E_8 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN PTSD2E_9 IS NULL THEN 1 
ELSE 0 END)+SUM(CASE WHEN PTSD2E_10 IS NULL THEN 1 ELSE 0 END)) < 2; 

回答

0

經過大量的搜索和排序的......這個作品......的情況下,它可以幫助別人!

 UPDATE mytablename o 
     INNER JOIN 
     (
      SELECT your_ID, 

((SUM(IFNULL(PTSD2E_1,0)))+(SUM(IFNULL(PTSD2E_2,0)))+ 
    (SUM(IFNULL(PTSD2E_3,0)))+(SUM(IFNULL(PTSD2E_4,0)))+(SUM(IFNULL(PTSD2E_5,0)))+ 
    (SUM(IFNULL(PTSD2E_6,0)))+(SUM(IFNULL(PTSD2E_7,0)))+(SUM(IFNULL(PTSD2E_8,0)))+ 
    (SUM(IFNULL(PTSD2E_9,0)))+(SUM(IFNULL(PTSD2E_10,0)))) AS PTSD_Total, 

(SUM(CASE 
    WHEN PTSD2E_1 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN PTSD2E_2 IS NULL THEN 1 
    ELSE 0 END)+SUM(CASE WHEN PTSD2E_3 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN 
    PTSD2E_4 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN PTSD2E_5 IS NULL THEN 1 ELSE 
    0 END)+SUM(CASE WHEN PTSD2E_6 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN 
    PTSD2E_7 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN PTSD2E_8 IS NULL THEN 1 ELSE 
    0 END)+SUM(CASE WHEN PTSD2E_9 IS NULL THEN 1 ELSE 0 END)+SUM(CASE WHEN 
    PTSD2E_10 IS NULL THEN 1 ELSE 0 END)) AS PTSD_Num_Missing 

      FROM mytablename 
      GROUP BY your_ID 
      HAVING PTSD_Num_Missing < 3 
     ) i ON o.your_ID = i.your_ID 
     SET o.PTSD_Total = i.PTSD_Total 
     ;