2014-01-12 5 views
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에 있음을 나타냅니다. 나는 빠진 것을 찾지 못한다. 누군가가 gthe 문제를 제안 할 수 있다면?

감사

+1

THEN 문에서 T4보다 약간의 필드 이름이 필요합니다. 그냥 별칭을 참조 할 수 있습니다. – Sparky

+0

@ Sparky 그런 뜻입니까? 그렇다면 여전히 문제를 해결하지 못합니다. –

+0

@Strawberry 이해를 돕기 위해 절름발이로 설명해 주시겠습니까? –

답변

2

당신은 당신의 가입 T0 및 T4 사이에서 기준에 누락되어 있습니다.

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에 합류했습니다. From 절의 하위 쿼리에서 TOO_SOFT와 TOO_EG가 어떻게 관련되는지 정의했기 때문에 T0와 T4가 관련되는 방식을 의미하지는 않습니다. 참조 설명서 (here)에 따르면 왼쪽 및 오른쪽 외부 조인에는 항상 조인 조건이 필요합니다.

또한 Case가 true가 아닌 경우 NULL을 반환하므로 Else 문없이 Case 문을 사용하는 것을 주저합니다. 그게 네가 원하는 것이면 좋겠지 만, Else 선언문을 남겨두기보다는 대안으로 프로그래밍하는 것이 도움이 될 것으로 생각된다.

+0

) onteh 데이터 유형에 따라 계산에서 정수 계산을 수행 할 수 있습니다. 아마도 당신이 원하는 것이 아닙니다. – HLGEM

+0

Christopher thats perfect !! –

+0

듣기 좋다! 대답을 표시해 주셔서 감사합니다! –

0
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 

당신은 단지 당신의 ISNULL 함수를 사용하여 반환 값이 null의 경우 대체 값을 제공 할 수 열에서 가능한 널 (null)에 대한 검사를하는 경우.

이 같은 ....

SELECT T0."REFID" 
     , T0."REFID_NR" 
     , T0."ID_POS" 
     , IFNULL(T4."REFID",'Sub_Value') AS "Result" 
+0

@Ali 죄송합니다. 이제 "AS"근처의 올바른 구문이 " –

+0

무엇입니까? 당신의 사건 진술서에서 원하는가? 'T4를 선택하십시오. "REFID"T4 일 때. "REFID"not not null "??? –

+0

글쎄, 난 그냥 T4를 확인하는 경우. "REFID"null이 아닌 다음 T4를 선택 (전, 선택 쿼리를 실행하고 테이블 T4에서와 같은 결과 집합을 유지). –