簡體   English   中英

如何在選擇查詢中添加if-then-else條件?

[英]How to add if-then-else conditions in a select query?

我想在select query應用以下條件。

IF  (TYPE = MBUSA or SDSA or MDSA OR PC) and (FINAL_STATUS = ACTIVE OR EXECUTED) 
then GET ID and Parent_ID
ELSEIF (TYPE = MSA) and (FINAL_STATUS = ACTIVE OR EXECUTED)
then  GET ID---(USING the ID from the else if condition AS FILTER, 
IF TYPE = (DSA OR BUSA) AND (FINAL_STATUS = ACTIVE OR EXECUTED) 
then GET ID and Parent_ID)

我需要寫程序嗎?

以下是數據庫結構:

http://i.imgur.com/L1VqOE3.png

CASE語句可以用作IF.. THEN... ELSE...的等效項IF.. THEN... ELSE...語句。 尚不清楚您要如何選擇它們,因為您的問題尚不清楚,因此有一些建議。

要選擇具有條件格式的字符串表示形式的單列:

SELECT
    CASE
        WHEN (TYPE IN ('MBUSA','SDSA','MDSA','PC') AND (FINAL_STATUS IN ('ACTIVE','EXECUTED')) 
            THEN ID + ' ' + P_ID
        WHEN ((TYPE = 'MSA') AND (FINAL_STATUS IN ('ACTIVE','EXECUTED'))
            THEN ID
        WHEN (TYPE IN ('DSA','BUSA') AND (FINAL_STATUS IN ('ACTIVE','EXECUTED')) 
            THEN ID + ' ' + P_ID
        ELSE ''
    END AS columnName
FROM
    tableName

將每個選擇到單獨的列中

SELECT
    CASE
        WHEN (TYPE IN ('MBUSA','SDSA','MDSA','PC') AND (FINAL_STATUS IN ('ACTIVE','EXECUTED')) 
            THEN ID
        WHEN ((TYPE = 'MSA') AND (FINAL_STATUS IN ('ACTIVE','EXECUTED'))
            THEN ID
        WHEN (TYPE IN ('DSA','BUSA') AND (FINAL_STATUS IN ('ACTIVE','EXECUTED')) 
            THEN ID
        ELSE ''
    END AS columnOneName
    CASE
        WHEN (TYPE IN ('MBUSA','SDSA','MDSA','PC') AND (FINAL_STATUS IN ('ACTIVE','EXECUTED')) 
            THEN P_ID
        WHEN ((TYPE = 'MSA') AND (FINAL_STATUS IN ('ACTIVE','EXECUTED'))
            THEN NULL
        WHEN (TYPE IN ('DSA','BUSA') AND (FINAL_STATUS IN ('ACTIVE','EXECUTED')) 
            THEN  P_ID
        ELSE ''
    END AS columnTwoName
FROM
    tableName

盡管看了上面的內容(我可能已經錯誤地轉錄了您的邏輯),但是當您可以擺脫2時,還是有以下三種情況:

CASE
    WHEN (TYPE IN ('MBUSA','SDSA','MDSA','PC','DSA','BUSA') AND (FINAL_STATUS IN ('ACTIVE','EXECUTED')) 
        THEN ID + ' ' + P_ID
    WHEN ((TYPE = 'MSA') AND (FINAL_STATUS IN ('ACTIVE','EXECUTED'))
        THEN ID
    ELSE ''
END AS columnName

我知道您現在已經設置了屏幕截圖,但是SQL Fiddle可能會更有用或更詳細,以便可以輕松地使用表名等。

有用的鏈接:

http://technet.microsoft.com/zh-CN/library/ms181765.aspx

SQL Case語句語法?

http://blog.sqlauthority.com/2007/04/14/sql-server-case-statementexpression-examples-and-explanation/

您可以使用CASE在PL / SQL中實現IF-THEN-ELSE-這只是一個示例:

    select case field1 WHEN '1' THEN 'VALUE1'
                       WHEN '2' THEN 'VALUE2'
                       ELSE 'VALUEOTHER'
                       END,
           case field2 WHEN '1' THEN 'VALUE1'
                       WHEN '2' THEN 'VALUE2'
                       ELSE 'VALUEOTHER'
                       END                  
    from (                   

    select '1' "FIELD1",
           '2' "FIELD2"
    from dual
    );

您不能在多個列上使用CASE語句; 但是,如果需要在同一CASE語句中比較多個字段,則可以使用如下解決方法:

    select case field1 || '_' || field2
                       WHEN '1_1' THEN 'FIELD1-IS-VALUE1 AND FIELD2-IS-VALUE1'
                       WHEN '1_2' THEN 'FIELD1-IS-VALUE1 AND FIELD2-IS-VALUE2'
                       WHEN '2_1' THEN 'FIELD1-IS-VALUE2 AND FIELD2-IS-VALUE1'
                       WHEN '2_2' THEN 'FIELD1-IS-VALUE2 AND FIELD2-IS-VALUE2'
                       ELSE 'VALUEOTHER'
                       END
    from (                   

    select '1' "FIELD1",
           '2' "FIELD2"
    from dual
    );

如果SQL語句變得難以閱讀,最好將視圖與SQL語句一起使用或使用PL / SQL。

參考文獻:

https://dba.stackexchange.com/questions/18239/using-same-case-when-conditions-for-multiple-query-columns

暫無
暫無

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

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