Sql 如何纠正这个错误
ORA-00904:“TM”“客户代码”:无效标识符 90400000-%s:无效标识符 *原因:Sql 如何纠正这个错误,sql,oracle,Sql,Oracle,ORA-00904:“TM”“客户代码”:无效标识符 90400000-%s:无效标识符 *原因: *操作:第3行第22列出现错误 您将来自多个独立查询的单个选择列表合并在一起,这些查询无法看到彼此的数据或结果;它们得到不同的列数和不同的数据类型。其中一些没有限制,可能会得到很多您不期望的数据 您应该将表连接在一起,而不是合并单独的查询;比如: SELECT CU.CUST_CODE FROM AR_CUSTOMERS CU WHERE CU.CUST_CODE = TM.CUST_CODE
*操作:第3行第22列出现错误
您将来自多个独立查询的单个选择列表合并在一起,这些查询无法看到彼此的数据或结果;它们得到不同的列数和不同的数据类型。其中一些没有限制,可能会得到很多您不期望的数据 您应该将表连接在一起,而不是合并单独的查询;比如:
SELECT CU.CUST_CODE
FROM AR_CUSTOMERS CU
WHERE CU.CUST_CODE = TM.CUST_CODE
UNION
SELECT ITS.ITEMS_CODE
FROM AR_ITEMS ITS
WHERE ITS.ITEMS_CODE = TM.ITEM_CODE
UNION
SELECT ITS.ITEMS_NAME
FROM AR_ITEMS ITS
WHERE TM.INVOICE_NO = TD.INVOICE_NO AND ITS.ITEMS_CODE = TD.ITEM_CODE
UNION
SELECT TO_CHAR(TM.JOB_DATE,'MON-YY')MON FROM AR_TRANS_MASTER TM
UNION
SELECT TO_CHAR(TM.JOB_DATE,'MM-YY')MM FROM AR_TRANS_MASTER TM
UNION
SELECT SUM(TD.QUANTITY)QUANTITY, SUM(TD.PRICE)UNIT
FROM AR_TRANS_DETAIL TD
WHERE ITS.ITEMS_CODE = TD.ITEM_CODE
AND
TM.JOB_DATE BETWEEN :STARTDATE AND :STOPDATE
GROUP BY
CU.CUST_CODE,ITS.ITEMS_CODE,ITS.ITEMS_NAME,TO_CHAR(TM.JOB_DATE,'MON-YY'),TO_CHAR(TM.JOB_DATE,'MM-YY')
ORDER BY
MM ASC;
未测试,您需要检查连接条件是否已按预期转换
您可以在文档中阅读更多关于和的信息。您无权访问那里的TM.CUST_代码。在进行联合时,每个SELECT都是相互“隔离”的。您还可以从联合的每个分支获得不同的数据—不同的数据类型,甚至不同的列数。你肯定是想把这些桌子连在一起,而不是把它们连在一起?
SELECT CU.CUST_CODE, ITS.ITEMS_CODE, ITS.ITEMS_NAME, TO_CHAR(TM.JOB_DATE,'MON-YY') MON,
TO_CHAR(TM.JOB_DATE,'MM-YY') MM, SUM(TD.QUANTITY) QUANTITY, SUM(TD.PRICE) UNIT
FROM AR_TRANS_MASTER TM
JOIN AR_CUSTOMERS CU
ON CU.CUST_CODE = TM.CUST_CODE
JOIN AR_ITEMS ITS
ON ITS.ITEMS_CODE = TM.ITEM_CODE
JOIN AR_TRANS_DETAIL TD
ON TD.INVOICE_NO = TM.INVOICE_NO
AND TD.ITEM_CODE = ITS.ITEMS_CODE
WHERE TM.JOB_DATE BETWEEN :STARTDATE AND :STOPDATE
GROUP BY CU.CUST_CODE, ITS.ITEMS_CODE, ITS.ITEMS_NAME, TO_CHAR(TM.JOB_DATE,'MON-YY'),
TO_CHAR(TM.JOB_DATE,'MM-YY')
ORDER BY MM ASC;