Question

I have a select query to get a result set and my query is as follows:

 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;

When I execute the query I get the following error:

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)

Here line 15 refers to the last line and indicates that the error exists at T4. I dont find anything missing. If anyone can suggest what would be gthe problem?

Thanks

Was it helpful?

Solution

You are missing the ON criteria in your join between T0 and T4. I would rework your query as:

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"

You had joined T0 and T4 without describing how they were related. Remember, just because you defined how TOO_SOFT and TOO_EG are related in your subquery in the From clause does not imply how T0 and T4 are related. According to a reference manual I found here, join criteria are always required with Left and Right Outer Joins.

Also, I would hesitate to use a Case statement without an Else statement because if the case is not true then it will return NULL. If that's what you want, great, but I suspect you would benefit from programming in an alternative rather than leaving the Else statement out altogether.

OTHER TIPS

 SELECT T0."REFID", T0."REFID_NR", T0."ID_POS", 
 CASE 
    WHEN T4."REFID" IS NOT NULL 
    THEN T4."REFID"       ---<-- T4 is a Table Alias you need to mention 
 END AS "result"               -- the column name as well like T4.ColumnName

if you are only checking against possible nulls in your column your can use ISNULL function and provide a substitute value if returned value is null.

something like this....

 SELECT T0."REFID"
       , T0."REFID_NR"
       , T0."ID_POS"
       , IFNULL(T4."REFID",'Sub_Value') AS "Result"
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top