2011-06-15 53 views
2

它已经有一段时间了我,因为我最后一次做的Oracle SQL,希望有人能告诉我,为什么我就得到了933:ORA-00933:SQL命令不能在子查询中正确地结束与加盟

SELECT TRIM(A.ACCOUNTNUMBER) AS INDBDebnmbr 
, TRIM(A.VOUCHER) AS INinvoicenmbr 
, A.DATE_ AS INinvoiceDate 
, A.DUEDATE AS INinvoiceDueDate 
, A.TXT AS INDescription 
, A.EXCHANGECODE AS INCurrencyCode 
, subq.AMOUNTMST AS INOriginalamount 
, subq.SETTLEAMOUNTMST AS INpaidAmount 
, subq.OPENAMOUNT AS INOpenAmount 
FROM (
    SELECT DEBTRANS.VOUCHER AS VOUCHER, SUM(DEBTRANS.AMOUNTMST) AS AMOUNTMST 
    , SUM(DEBTRANS.SETTLEAMOUNTMST) AS SETTLEAMOUNTMST 
    , SUM(DEBTRANS.AMOUNTMST - DEBTRANS.SETTLEAMOUNTMST) AS OPENAMOUNT 
    FROM XAL_SUPERVISOR.DEBTRANS DEBTRANS 
    WHERE DEBTRANS.OPEN = 1 AND 
    DEBTRANS.TRANSTYPE <> 9 AND 
    (DEBTRANS.AMOUNTMST - DEBTRANS.SETTLEAMOUNTMST) <> 0 AND 
    DEBTRANS.DATASET = 'FIK' 
    GROUP BY DEBTRANS.VOUCHER) subq INNER JOIN DEBTRANS A ON A.VOUCHER = subq.VOUCHER 

在SQL Plus中 由于提前,

迈克尔

+0

有更多的这个查询?我刚刚尝试类似的,它工作正常。 – Tsar 2011-06-15 13:23:30

+1

难道是我在使用Oracle 8i吗? – 2011-06-15 13:38:57

+0

WHERE DEBTRANS.OPEN ...中的'OPEN'是否可能是关键字? – 2011-06-15 13:46:28

回答

2

你对使用8i的评论解释它。直到9i之后,ANSI '92连接语法才在Oracle中实现。

您需要修改查询:

 SELECT TRIM(A.ACCOUNTNUMBER) AS INDBDebnmbr 
    , TRIM(A.VOUCHER) AS INinvoicenmbr 
    , A.DATE_ AS INinvoiceDate 
    , A.DUEDATE AS INinvoiceDueDate 
    , A.TXT AS INDescription 
    , A.EXCHANGECODE AS INCurrencyCode 
    , subq.AMOUNTMST AS INOriginalamount 
    , subq.SETTLEAMOUNTMST AS INpaidAmount 
    , subq.OPENAMOUNT AS INOpenAmount 
    FROM (
     SELECT DEBTRANS.VOUCHER AS VOUCHER, SUM(DEBTRANS.AMOUNTMST) AS AMOUNTMST 
     , SUM(DEBTRANS.SETTLEAMOUNTMST) AS SETTLEAMOUNTMST 
     , SUM(DEBTRANS.AMOUNTMST - DEBTRANS.SETTLEAMOUNTMST) AS OPENAMOUNT 
     FROM XAL_SUPERVISOR.DEBTRANS DEBTRANS 
     WHERE DEBTRANS.OPEN = 1 AND 
     DEBTRANS.TRANSTYPE <> 9 AND 
     (DEBTRANS.AMOUNTMST - DEBTRANS.SETTLEAMOUNTMST) <> 0 AND 
     DEBTRANS.DATASET = 'FIK' 
     GROUP BY DEBTRANS.VOUCHER) subq, 
     DEBTRANS A 
WHERE A.VOUCHER = subq.VOUCHER; 
+0

感谢DCookie,几乎在那里..仍然是一个933,可能是因为'DEBTRANS A WHERE A.VOUCHER = subq.VOUCHER “? – 2011-06-15 14:51:07

+0

Duh。 subq后需要一个逗号;-)回答编辑。 – DCookie 2011-06-15 14:55:13

+0

超级!非常感谢你的帮助! – 2011-06-15 14:59:36

1

什么是要加入到DEBTRANS,是XAL_SUPERVISOR.DEBTRANS的另一个实例? 如果是这样,请不要使用DEBTRANS作为子查询中的别名,这很混乱。将其更改为其他内容并重试,例如

SELECT TRIM(A.ACCOUNTNUMBER) AS INDBDebnmbr 
, TRIM(A.VOUCHER) AS INinvoicenmbr 
, A.DATE_ AS INinvoiceDate 
, A.DUEDATE AS INinvoiceDueDate 
, A.TXT AS INDescription 
, A.EXCHANGECODE AS INCurrencyCode 
, subq.AMOUNTMST AS INOriginalamount 
, subq.SETTLEAMOUNTMST AS INpaidAmount 
, subq.OPENAMOUNT AS INOpenAmount 
FROM (
    SELECT dt.VOUCHER AS VOUCHER 
    , SUM(dt.AMOUNTMST) AS AMOUNTMST 
    , SUM(dt.SETTLEAMOUNTMST) AS SETTLEAMOUNTMST 
    , SUM(dt.AMOUNTMST - dt.SETTLEAMOUNTMST) AS OPENAMOUNT 
    FROM XAL_SUPERVISOR.DEBTRANS dt 
    WHERE dt.OPEN = 1 AND 
    dt.TRANSTYPE <> 9 AND 
    (dt.AMOUNTMST - dt.SETTLEAMOUNTMST) <> 0 AND 
    dt.DATASET = 'FIK' 
    GROUP BY dt.VOUCHER) subq INNER JOIN DEBTRANS A ON A.VOUCHER = subq.VOUCHER 
+0

看起来像是如果我通过错误删除组持续存在? – 2011-06-15 13:18:37

+0

thx BDN,但没有任何变化 – 2011-06-15 14:09:41

0

相反

INNER的最后一行的JOIN DEBTRANS A ON A.VOUCHER = subq.VOUCHER

使用

INNER JOIN DEBTRANS A ON A.VOUCHER = subq.INinvoicenmbr

+0

对不起,但它似乎没有工作... – 2011-06-15 13:29:10

相关问题