0

結果セットを取得するための選択クエリがあり、クエリは次のとおりです。

 SELECT T0."REFID", T0."REFID_NR", T0."ID_POS", 
 CASE 
    WHEN T4."REFID" IS NOT NULL 
    THEN T4."REFID"
 END AS "result"
FROM "SYSTEM"."T00_SOFT" T0
LEFT OUTER JOIN 
(
SELECT T1."REFID", T1."REFID_NR", T1."ID_POS",T1."ARTIKEL" ,T2."VEHW", T2."VNHW" , 
(((T2."VEHW"*100)/(T2."VNHW"))*((T1."ER_AW"*100)))/(T1."BAS_AW") AS "claims"
FROM "SYSTEM"."T00_SOFT" T1
INNER JOIN "SYSTEM"."T00_EG" T2
ON T1."REFID" = T2."REFID"
AND T1."ORGID_WE" = T2."ORGID"
AND T1."ARTIKEL" = T2."MATNR" ) T4;

クエリを実行すると、次のエラーが表示されます。

Could not execute 'SELECT T0."REFID", T0."REFID_NR", T0."ID_POS", CASE WHEN T4."REFID" IS NOT NULL THEN ...' in 42 ms 382 µs . 
SAP DBTech JDBC: [257] (at 521): sql syntax error: line 15 col 33 (at pos 521)

ここで、15 行目は最後の行を参照しており、エラーが に存在することを示していますT4。足りないものは見つかりません。誰かが問題を示唆できるとしたら?

ありがとう

4

2 に答える 2

2

T0 と T4 の間の結合に ON 条件がありません。クエリを次のように作り直します。

SELECT T0."REFID", T0."REFID_NR", T0."ID_POS", 
 CASE 
    WHEN T4."REFID" IS NOT NULL 
    THEN T4."REFID"
 END AS "result"
FROM "SYSTEM"."T00_SOFT" T0
LEFT OUTER JOIN 
    (
    SELECT T1."REFID", T1."REFID_NR", T1."ID_POS",T1."ARTIKEL" ,T2."VEHW", T2."VNHW" , 
    (((T2."VEHW"*100)/(T2."VNHW"))*((T1."ER_AW"*100)))/(T1."BAS_AW") AS "claims"
    FROM "SYSTEM"."T00_SOFT" T1
        INNER JOIN "SYSTEM"."T00_EG" T2
            ON T1."REFID" = T2."REFID"
                AND T1."ORGID_WE" = T2."ORGID"
                AND T1."ARTIKEL" = T2."MATNR" ) T4
    ON T0."REFID" = T4."REFID"

あなたは、T0 と T4 がどのように関連しているかを説明せずに参加しました。TOO_SOFT と TOO_EG がサブクエリの From 句でどのように関連付けられるかを定義したからといって、T0 と T4 がどのように関連付けられるかを示すわけではありません。ここで見つけたリファレンス マニュアルによると、左右の外部結合には常に結合条件が必要です。

また、ケースが true でない場合は NULL が返されるため、Else ステートメントなしで Case ステートメントを使用することを躊躇します。それがあなたの望むものなら素晴らしいことですが、Else ステートメントを完全に除外するよりも、別の方法でプログラミングする方がメリットがあると思います。

于 2014-01-13T20:03:41.317 に答える