簡體   English   中英

SQL 查詢大小寫 when then in where 子句

[英]SQL query case when then in where clause

我讀了很多類似的問題,但沒有找到適合我的解決方案。 基本上,只有在特殊條件 ( PFSP.EINKAUFS_KZ = 2 ) 為真時,我才希望有一個where子句 ( AND PEKP.VORGANGS_ART = 'BE' )。

我嘗試了很多這樣的方法:

SELECT *
FROM PFSP 
LEFT OUTER JOIN PFAK on PFSP.RUECKMELDE_NR = PFAK.RUECKMELDE_NR 
LEFT OUTER JOIN PEKP ON (PFSP.BESTELL_NR=PEKP.VORGANGS_NR) 
                     AND (PFSP.BESTELL_POS_NR=PEKP.VORGANGS_POS_NR) 
LEFT OUTER JOIN PMLB ON PFSP.KOMPONENTEN_ARTIKEL_NR=PMLB.ARTIKEL_NR 
WHERE PFAK.KD_VORGANGS_NR = '910-001213' 
  AND PFSP.RUECKMELDE_STATUS = '3' 
  AND PFSP.BESCHAFFUNGSKENNER = 'F' 
  AND CASE PFSP.EINKAUFS_KZ 
         WHEN 2 THEN PEKP.VORGANGS_ART = 'BE'
       END

但我不斷收到錯誤:

“=”附近的語法錯誤

跳過CASE ,改用AND / OR

AND (PFSP.EINKAUFS_KZ <> 2 OR PEKP.VORGANGS_ART = 'BE')

如果PFSP.EINKAUFS_KZ = 2,則PEKP.VORGANGS_ART必須等於“BE”。

如果PFSP.EINKAUFS_KZ <> 2, PEKP.VORGANGS_ART是什么並不重要。

你可能想要這樣的東西:

AND (
      (PFSP.EINKAUFS_KZ = 2 AND PEKP.VORGANGS_ART='BE') 
      OR PFSP.EINKAUFS_KZ <> 2 --You may need to catch NULL as well
    )

使用此 CASE 表達式:

AND 1 = CASE  
  WHEN PFSP.EINKAUFS_KZ = 2 AND PEKP.VORGANGS_ART = 'BE' THEN 1 
  WHEN PFSP.EINKAUFS_KZ = 2 THEN 0
  ELSE 1
END

條件的順序很重要。

SELECT *
FROM PFSP 
LEFT OUTER JOIN PFAK on PFSP.RUECKMELDE_NR = PFAK.RUECKMELDE_NR 
LEFT OUTER JOIN PEKP ON (PFSP.BESTELL_NR=PEKP.VORGANGS_NR) 
                     AND (PFSP.BESTELL_POS_NR=PEKP.VORGANGS_POS_NR) 
LEFT OUTER JOIN PMLB ON PFSP.KOMPONENTEN_ARTIKEL_NR=PMLB.ARTIKEL_NR 
WHERE PFAK.KD_VORGANGS_NR = '910-001213' 
  AND PFSP.RUECKMELDE_STATUS = '3' 
  AND PFSP.BESCHAFFUNGSKENNER = 'F' 
  AND ((PFSP.EINKAUFS_KZ = 2 AND PEKP.VORGANGS_ART = 'BE') OR (PFSP.EINKAUFS_KZ <> 2)   )

暫無
暫無

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

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