2012-02-14 84 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