我有一个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
答案 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'