簡體   English   中英

如何構造具有多個條件的SQL CASE STATEMENT

[英]HOW to structure SQL CASE STATEMENT with multiple conditions

我想將以下邏輯轉換為SQL查詢,並且我知道可以使用CASE WHEN THEN ELSE語句來實現,但是我不確定如何將其組合到查詢中。 請幫忙。

  1. 其中AG_AGENTS.SALES_AREA_DESC = Dom。 -NAT
  2. 如果PX_PAXWEB.COUNTRY = AUT,則PX_PAXWEB.POSTCODE
  3. 如果PX_PAXWEB.COUNTRY <> AUT,則vwPxPaxweb.SALES_AREA
  4. 如果點2和/或3為空,則只需使用AG_AGENTS.SALES_AREA_DESC
  5. 其中AG_AGENTS.SALES_AREA_DESC =整數。 –入站,然后是vwPxPaxweb.SALES_AREA
  6. 如果點5為空,則使用AG_AGENTS.SALES_AREA_DESC

      The new field can be called as SALES_AREA_DESC_2 

一般邏輯是:

select 
    CASE WHEN test1 = 'a' THEN 1
        WHEN test1 = 'b' THEN 2
        WHEN (test1 = 'c') AND (test2 is null) THEN 3
        ELSE 0 END as myfield
from mytable

就您而言,如果我正確理解您的查詢,則為:

CASE WHEN (AG_AGENTS.SALES_AREA_DESC = Dom. - NAT) 
        AND (ISNULL(PX_PAXWEB.COUNTRY,'') = AUT) THEN PX_PAXWEB.POSTCODE
     WHEN (AG_AGENTS.SALES_AREA_DESC = Dom. - NAT) 
        AND (ISNULL(PX_PAXWEB.COUNTRY,'') <> AUT) THEN vwPxPaxweb.SALES_AREA
     WHEN (AG_AGENTS.SALES_AREA_DESC = Dom. - NAT) 
             AND (PX_PAXWEB.COUNTRY is null) THEN AG_AGENTS.SALES_AREA_DESC
     WHEN (AG_AGENTS.SALES_AREA_DESC = Int. – Inbound) 
        THEN vwPxPaxweb.SALES_AREA
     WHEN (AG_AGENTS.SALES_AREA_DESC = Int. – Inbound) 
        THEN AG_AGENTS.SALES_AREA_DESC
     WHEN (AG_AGENTS.SALES_AREA_DESC is null)
            OR (Int. is null) OR (Inbound is null) 
        THEN AG_AGENTS.SALES_AREA_DESC
     ELSE AG_AGENTS.SALES_AREA_DESC -- or some other exit value

END:SALES_AREA_DESC_2

注意:您的問題尚不清楚,因此我必須做一些假設:-假設“ Dom。”,“ NAT”等是字段(點的奇數點..)-我不確定哪個字段可以為NULL(例如:“如果點2和/或3為空”,等等),所以我為案例的最后一個分支選擇了全部。 這樣您就可以找出其余的部分。

暫無
暫無

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

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