簡體   English   中英

具有多個AND和OR的SQL CASE WHEN

[英]SQL CASE WHEN with multiple AND and OR

您能告訴我下面的SQL代碼是否有意義。 我在CASE WHEN使用多個ANDsOR 謝謝你的幫助!

SELECT id, period,
 CASE WHEN state = 'group8' AND mathscore = 0 AND manager = '' OR manager ISNULL 
 THEN 'Tom' ELSE manager END AS mgr, 

 CASE WHEN state = 'group8' AND mathscore = 0 AND associate = '' OR associate 
 ISNULL THEN 'Dick' ELSE associate END AS asso,

 CASE WHEN state = 'group8' AND mathscore = 0 AND analyst = '' OR analyst ISNULL 
 THEN 'Harry' ELSE analyst END AS a

 FROM class.sections 

使用AND和OR時,應將其括在括號中,以免產生不良結果。 即:

CASE WHEN (state = 'group8' AND mathscore = 0)
AND (manager = '' OR manager ISNULL)
THEN 'Tom' ELSE manager END AS mgr

與以下內容不同:

CASE WHEN (state = 'group8' AND mathscore = 0 AND manager = '')
OR manager ISNULL 
THEN 'Tom' ELSE manager END AS mgr

如果沒有可使用的示例數據,我會押注您正在尋找類似的東西,您的空格和NULL與括號一起分組。

另外,我將您的ISNULL (在某些方言中為函數)更改為IS NULL (在SQL Server中為狀態,無論如何)。

SELECT
  id
 ,period
 ,CASE
    WHEN state = 'group8'
         AND mathscore = 0
         AND (manager = ''
             OR manager IS NULL) THEN 'Tom'
    ELSE manager
  END AS mgr
 ,CASE
    WHEN state = 'group8'
         AND mathscore = 0
         AND (associate = ''
             OR associate IS NULL) THEN 'Dick'
    ELSE associate
  END AS asso
 ,CASE
    WHEN state = 'group8'
         AND mathscore = 0
         AND (analyst = ''
             OR analyst IS NULL) THEN 'Harry'
    ELSE analyst
  END AS a
FROM
  class.sections;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM