2012-02-14 71 views
-2

請幫幫我,我得到了下面的SQL連接謂詞無效的錯誤,這將是非常混亂,但如果你能幫幫我。提前致謝。連接謂詞無效(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 2012-02-14 02:26:44

+0

請重新格式化,所以我們不必滾動。與其他聯接語法是不是在某些RDBMS中允許 – 2012-02-14 02:29:20

+0

混合逗號連接。 – 2012-02-14 02:36:30

回答

0

我不知道您所使用的參數傳遞到您的查詢是什麼系統,但我想它取代了問號(?)下面

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

顯示在任何情況下,錯誤你得到的是因爲其中一個是不正確的。請說明如何將參數傳遞給此查詢。

+0

@avamoe所以......錯誤在哪個部分? – cctan 2012-02-14 04:24:10

+0

@cctam - 我的猜測是,他不知道他需要那裏的價值。可能是一項家庭作業。 – Hogan 2012-02-14 05:02:36

+0

我已經解決了,感謝你的回覆。 – Bella 2012-02-14 06:10:58