Sql oracle pl/saql ORA-01790:表达式必须具有与相应表达式相同的数据类型

Sql oracle pl/saql ORA-01790:表达式必须具有与相应表达式相同的数据类型,sql,oracle,Sql,Oracle,这是我的代码,请帮助我解决我的问题,因为我得到了mis数学数据类型的eroor,但所有数据类型都相同,销售人员ID似乎不匹配。它可能是表中的数值数据类型 可能是,您可以在第一次联合查询中使用到字符(销售人员ID),如下所示。它将帮助你解决这个问题 SELECT SUM(SALES_AMOUNT)SALES, YEAR, MONTH, CATAGORY_ID, SALES_PERSON_ID, ITEM_TYPE_ID FROM APEX_FINAL where sales_amount

这是我的代码,请帮助我解决我的问题,因为我得到了mis数学数据类型的eroor,但所有数据类型都相同,销售人员ID似乎不匹配。它可能是表中的
数值
数据类型

可能是,您可以在第一次联合查询中使用
到字符(销售人员ID)
,如下所示。它将帮助你解决这个问题

SELECT SUM(SALES_AMOUNT)SALES,
YEAR,
MONTH,
CATAGORY_ID,
SALES_PERSON_ID,
ITEM_TYPE_ID
FROM APEX_FINAL
    where sales_amount is not null
     and catagory_id is not null
GROUP BY (YEAR,MONTH,CATAGORY_ID,SALES_PERSON_ID,ITEM_TYPE_ID)

union all

SELECT SUM(SALES_AMOUNT)SALES,
YEAR,
MONTH,
CATAGORY_ID,
'all others' SALES_PERSON_ID,
ITEM_TYPE_ID
FROM APEX_FINAL
    where sales_amount is not null
    and sales_person_id is null 
GROUP BY (YEAR,MONTH,CATAGORY_ID,SALES_PERSON_ID,ITEM_TYPE_ID)

正如@Nisha已经指出的,您可能会遇到此错误,因为
SALES\u PERSON\u ID
是一个数字字段,您必须将其转换为字符串,或者(最好)连接到另一个表以获取销售人员的姓名

此外,我相信您的查询中有一个逻辑错误-在您的第一个
选择
中,您按
分类过滤人员id不为空
;这可能是
sales\u person\u id不为空

假设是这种情况,则可以使用
case
语句简化查询(也可以使用
DECODE
COALESCE
):


我在一个类似的问题上挣扎了几个小时,意识到我们正在联合的两个表的列顺序应该是相同的


它仍然会给您相同的错误,因此请确保列的顺序相同:)

谢谢,遇到了相同的错误,这实际上解决了我的问题
SELECT SUM(SALES_AMOUNT)SALES,
YEAR,
MONTH,
CATAGORY_ID,
TO_CHAR(SALES_PERSON_ID) SALES_PERSON_ID,
ITEM_TYPE_ID
FROM APEX_FINAL
    where sales_amount is not null
     and catagory_id is not null
GROUP BY (YEAR,MONTH,CATAGORY_ID,SALES_PERSON_ID,ITEM_TYPE_ID)

union all

SELECT SUM(SALES_AMOUNT)SALES,
YEAR,
MONTH,
CATAGORY_ID,
'all others' SALES_PERSON_ID,
ITEM_TYPE_ID
FROM APEX_FINAL
    where sales_amount is not null
    and sales_person_id is null 
GROUP BY (YEAR,MONTH,CATAGORY_ID,SALES_PERSON_ID,ITEM_TYPE_ID)
SELECT 
  SUM(SALES_AMOUNT) SALES,
  YEAR,
  MONTH,
  CATAGORY_ID,
  (case 
     when sales_person_id is not null then to_char(SALES_PERSON_ID)
     else 'all others' 
   end) as sales_person_id,
  ITEM_TYPE_ID
FROM APEX_FINAL
where sales_amount is not null
GROUP BY (YEAR,MONTH,CATAGORY_ID,SALES_PERSON_ID,ITEM_TYPE_ID)