[英]IF ELSE condition in an SQL query
我有一個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
不為null,我想要做的就是獲取一個新參數。 任何幫助將不勝感激。
謝謝,Yeshwanth
有時你可能需要那種內聯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
為null,則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'
您只需要一個左連接,如果I_PAYT_REF
為null,則連接將不會排除主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'
加入兩個表並在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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.