2012-02-14 6 views
-2

Join 술어가 아래 SQL에 대해 유효하지 않은 오류가 발생했습니다. 매우 지저분 할 수는 있지만 가능하면 도와주십시오. 미리 감사드립니다.Join 술어 유효하지 않음 (SQL0338)

SELECT department.eaaitm, 
     RIGHT(LEFT(egacdt, 6), 2), 
     SUM(CASE department.eaaitm 
      WHEN '912' THEN egacam/2 
      ELSE egacam 
      END) AS suma, 
     SUM(CASE department.eaaitm 
      WHEN '700' THEN CASE data.eaaicl 
           WHEN '400' THEN -egacam 
           WHEN '402' THEN -egacam 
           WHEN '404' THEN -egacam 
           ELSE egacam 
          END 
      WHEN '912' THEN egacam/2 
      ELSE egacam 
      END/cuarat) 
FROM mvxcdtpusd.fchacc department, 
     mvxcdtpusd.fchacc data 
     LEFT JOIN mvxcdtpusd.fgledg 
     ON data.eaaitm = egait1 
      AND data.eacono = 888 
      AND data.eaaitp = 1 
      AND egcono = 888 
      AND (egdivi = ? 
        AND (data.eadivi = ? 
         OR data.eadivi = '')) 
      AND (egdivi = ? 
        AND (department.eadivi = ? 
         OR department.eadivi = '')) 
      AND egacdt >= ? 
      AND egacdt <= ? 
     JOIN mvxcdtpusd.ccurra 
     ON (cudivi = (CASE egdivi 
          WHEN '300' THEN egdivi 
          ELSE '100' 
         END) 
       AND cucucd = 'USD' 
       AND LEFT(cucutd, 6) = LEFT(egacdt, 6) 
       AND ((cudivi = '300' 
         AND cucrtp = '50') 
        OR (cudivi <> '300' 
          AND culocd = 'USD' 
          AND cucrtp = '1')) 
       AND RIGHT(cucutd, 2) = '01') 
WHERE egait3 = department.eaaitm 
     AND department.ealccd IN (0, 1) 
     AND department.eacono = 888 
     AND department.eaaitp = 3 
     AND data.eaaicl >= '400' 
     AND (department.eaaitm IN ('000') 
       OR department.eaaitm IN ('912') 
       AND data.eaaitm NOT IN ('5707310') 
       OR department.eaaitm IN ('914', '808') 
       AND data.eaaitm NOT IN ('5707310')) 
GROUP BY department.eaaitm, 
      RIGHT(LEFT(egacdt, 6), 2) 
ORDER BY department.eaaitm, 
      RIGHT(LEFT(egacdt, 6), 2) 

----------------------------------- Ans : ------ ----------------------------- 나는 이미 풀었다. 감사합니다 모든

SELECT department.eaaitm, 
     RIGHT(LEFT(egacdt, 6), 2), 
     SUM(CASE department.eaaitm 
      WHEN '912' THEN egacam/2 
      ELSE egacam 
      END) AS suma, 
     SUM(CASE department.eaaitm 
      WHEN '700' THEN CASE data.eaaicl 
           WHEN '400' THEN -egacam 
           WHEN '402' THEN -egacam 
           WHEN '404' THEN -egacam 
           ELSE egacam 
          END 
      WHEN '912' THEN egacam/2 
      ELSE egacam 
      END/cuarat) 
FROM mvxcdtpusd.fchacc department, 
     mvxcdtpusd.fchacc data 
     LEFT JOIN mvxcdtpusd.fgledg 
     ON data.eaaitm = egait1 
      AND data.eacono = 888 
      AND data.eaaitp = 1 
      AND egcono = 888 
      AND (egdivi = 100 
        AND (data.eadivi = 100 
         OR data.eadivi = '')) 
      AND egacdt >= 20120101 
      AND egacdt <= 20120131 
     JOIN mvxcdtpusd.ccurra 
     ON (cudivi = (CASE egdivi 
          WHEN '300' THEN egdivi 
          ELSE '100' 
         END) 
       AND cucucd = 'USD' 
       AND LEFT(cucutd, 6) = LEFT(egacdt, 6) 
       AND ((cudivi = '300' 
         AND cucrtp = '50') 
        OR (cudivi <> '300' 
          AND culocd = 'USD' 
          AND cucrtp = '1')) 
       AND RIGHT(cucutd, 2) = '01') 
WHERE egait3 = department.eaaitm 
     AND department.ealccd IN (0, 1) 
     AND department.eacono = 888 
     AND department.eaaitp = 3 
     AND data.eaaicl >= '400' 
     AND (department.eaaitm IN ('000') 
       OR department.eaaitm IN ('912') 
       AND data.eaaitm NOT IN ('5707310') 
       OR department.eaaitm IN ('914', '808') 
       AND data.eaaitm NOT IN ('5707310')) 
     AND (egdivi = 100 
      AND (department.eadivi = 100 
        OR department.eadivi = '')) 
GROUP BY department.eaaitm, 
      RIGHT(LEFT(egacdt, 6), 2) 
ORDER BY department.eaaitm, 
      RIGHT(LEFT(egacdt, 6), 2) 
+1

이 코드를 들여 쓰기 할 수 있다면 더 좋을 것입니다. 보십시오 [여기에서] (http://www.dpriver.com/pp/sqlformat.htm). – cctan

+0

다시 스크롤해야하므로 스크롤 할 필요가 없습니다. –

+0

일부 RDBMS에서는 다른 조인 구문과 쉼표 조인을 함께 사용할 수 없습니다. –

답변

0

난 당신이 쿼리에 매개 변수를 전달하기 위해 사용하고있는 시스템 모르겠어요하지만 어떤 경우 오류에

AND (egdivi = ? 
       AND (data.eadivi = ? 
        OR data.eadivi = '')) 
     AND (egdivi = ? 
       AND (department.eadivi = ? 
        OR department.eadivi = '')) 
     AND egacdt >= ? 
     AND egacdt <= ? 

아래에 표시 (?)는 물음표를 대체 상상 그 중 하나가 옳지 않기 때문에 당신이 얻고 있습니다. 이 쿼리에 매개 변수를 전달하는 방법을 보여주십시오.

+0

@avamoe 그래서 ... 오류가 어느 부분에 있습니까? – cctan

+0

@cctam - 내 생각에, 그는 거기에 가치가 필요하다는 것을 몰랐습니다. 아마 숙제가있을거야. – Hogan

+0

나는 yr 응답을위한. 감사를 풀었다. – Bella

관련 문제