1

プライマリテーブルに値が存在する場合にのみ、別のテーブルから追加のパラメータをフェッチする必要がある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でない場合に新しいパラメータをフェッチすることだけです。どんな助けでも大歓迎です。

ありがとう、イェシュワント

4

3 に答える 3

2

場合によっては、そのようなインラインが必要になることがあります。これは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'
于 2012-10-27T15:05:43.323 に答える
2

左結合が必要です。nullの場合、結合はメインレコードをI_PAYT_REF除外せず、とにかくnullが返されます。 histPAYMENT_FILE_ID

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'
于 2012-10-27T15:07:02.403 に答える
0

両方のテーブルを結合CASEし、select句にステートメントを適用します。

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'
于 2012-10-27T15:07:02.867 に答える