IF查询中的ELSE条件

时间:2012-10-27 15:03:29

标签: sql

我有一个SQL查询,我必须从另一个表中获取一个额外的参数,只有在主表中存在一个值时。我尝试过使用if else子句,但它永远不会有效。

SQL看起来像这样:

SELECT  
   hist.I_PAYT_REF AS PAY_REF,
   hist.C_USERID AS USER_ID,
   IF(@hist.I_PAYT_REF IS NULL)
   BEGIN
      SELECT 
         PAYT.I_PAYT_REQ_SUM AS PAYMENT_FILE_ID
      Join 
         SP.TSP_CP_PAYT_RQ_DTL PAYT ON PAYT.I_PAYT_REF = hist.I_PAYT_REF
   END
FROM 
   sp.TSP_CP_HIST hist
WHERE 
   hist.C_HIST_TYPE ='V'

如果hist.I_PAYT_REF不为空,我想要做的就是获取一个新参数。任何帮助将不胜感激。

谢谢, Yeshwanth

3 个答案:

答案 0 :(得分:2)

有时你可能需要那种内联if,并且它是一个CASE子句,它的工作方式如下:)

select
    hist.I_PAYT_REF as PAY_REF,
    hist.C_USERID as USER_ID,
    case
        when hist.I_PAYT_REF is null then PAYT.I_PAYT_REQ_SUM
        else null
    end as PAYMENT_FILE_ID
from sp.TSP_CP_HIST as hist
    left outer join SP.TSP_CP_PAYT_RQ_DTL as PAYT on PAYT.I_PAYT_REF = hist.I_PAYT_REF
where hist.C_HIST_TYPE ='V'

但正如@ jenson-button-event所说 - 这里没有必要使用case - 如果I_PAYT_REF为空,则left outer join不返回SP.TSP_CP_PAYT_RQ_DTL的记录。所以你可以写

select
    hist.I_PAYT_REF as PAY_REF,
    hist.C_USERID as USER_ID,
    PAYT.I_PAYT_REQ_SUM
from sp.TSP_CP_HIST as hist
    left outer join SP.TSP_CP_PAYT_RQ_DTL as PAYT on PAYT.I_PAYT_REF = hist.I_PAYT_REF
where hist.C_HIST_TYPE ='V'

答案 1 :(得分:2)

您只需要一个左连接,如果I_PAYT_REF为空,则连接不会排除主hist记录,并且PAYMENT_FILE_ID无论如何都将返回null。

SELECT  
    hist.I_PAYT_REF AS PAY_REF,
    hist.C_USERID AS USER_ID,
    PAYT.I_PAYT_REQ_SUM AS PAYMENT_FILE_ID
    FROM 
         SP.TSP_CP_HIST hist left join 
         SP.TSP_CP_PAYT_RQ_DTL PAYT ON PAYT.I_PAYT_REF = hist.I_PAYT_REF 
    WHERE hist.C_HIST_TYPE ='V'

答案 2 :(得分:0)

加入两个表并在select子句中应用CASE语句。

SELECT  
    hist.I_PAYT_REF AS PAY_REF,
    hist.C_USERID AS USER_ID,
    CASE WHEN hist.I_PAYT_REF IS NULL
        THEN PAYT.I_PAYT_REQ_SUM
        ELSE I_PAYT_REF
    END as PAYMENT_FILE_ID
FROM    sp.TSP_CP_HIST hist
        INNER JOIN SP.TSP_CP_PAYT_RQ_DTL AS PAYT
              ON PAYT.I_PAYT_REF = hist.I_PAYT_REF
WHERE hist.C_HIST_TYPE ='V'