2016-09-05 10 views
0

に基づいてデータをロードするためにMySQLのクエリcase文コンディション

SELECT task.id,task.Task,task.TaskCategory,task.IsComplete, 
task.AssignedDate,task.CompletionDate, task.AssignedTo,task.templateID,task.ListingID,task.ClosingID, 
task.ContactID,task.LeadID,task.statusid, taskcategory.taskCategoryID,taskcategory.Category FROM 
task INNER JOIN taskcategory ON task.TaskCategory = taskcategory.taskCategoryID WHERE 1=1 
and (CompletionDate = CURDATE() OR CompletionDate IS NULL AND task.IsComplete = 0) 
and assignedto = 2345 and id = 2421 and 
CASE(WHEN status_for_design = 0 THEN (leadid is not null or ContactID is not null) 
THEN NULL 
END AS status_for_design) 
group by 
assignedto ORDER BY task.AssignedDate ASC 

主な目的は= status_for_design = 0 [利用leadidまたはcontactidがnullでない場合ですが、status_for_design場合1

が、私はNO、あなたがそのようなWHERE句でCASE条件を含めることはできませんエラー

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHEN status_for_design = 0 THEN (leadid is not null or ContactID is not null) 
T' at line 7 

答えて

0

本当にWHERE句で複合条件の下にそのCASEを変換することができます。

WHERE句にはASが含まれています。それは適切ではありません。 CASEWHEREには必要ではないこと

SELECT t.*, tc.taskCategoryID, tc.Category 
FROM task t INNER JOIN 
    taskcategory tc 
    ON t.TaskCategory = tc.taskCategoryID 
WHERE 1 = 1 AND 
     (CompletionDate = CURDATE() OR CompletionDate IS NULL AND t.IsComplete = 0) AND 
     assignedto = 2345 AND 
     id = 2421 AND 
     (status_for_design <> 0 or leadid is not null or ContactID is not null) 
GROUP BY assignedto 
ORDER BY t.AssignedDate ASC ; 

注:私はあなたが欲しいクエリはもっと​​このように見えると思います。また、SELECTの列が集約されておらず、GROUP BYに含まれていないクエリについては疑いがあります。

0

に直面しています。それが不平を言っている。もしあなたがSELECT節にそれを持っていたら、ケース式をSELECT節に移してください。人間は、それはあなたが何が起こっているかを理解する助けとなる読むことができるようにそうでなければ、あなたはあなたのクエリの書式設定、

AND ((status_for_design = 0 AND leadid is not null) 
AND (status_for_design = 0 AND ContactID is not null))