【问题标题】:oracle pl/saql ORA-01790: expression must have same datatype as corresponding expressionoracle pl/saql ORA-01790: 表达式必须与对应的表达式具有相同的数据类型
【发布时间】:2014-06-05 06:41:31
【问题描述】:
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)

这是我的代码,请帮助我解决我的问题,因为我得到了错误数学数据类型的错误,但所有数据类型都是相同的

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    销售人员 ID 似乎不匹配。它可能是您表中的 NUMERIC 数据类型。

    您可以在下面的第一个联合查询中使用TO_CHAR(SALES_PERSON_ID)。它会帮助你解决问题

    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)
    

    【讨论】:

      【解决方案2】:

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

      它仍然给你同样的错误,所以请确保列的顺序相同:)

      【讨论】:

      • 谢谢,遇到了同样的错误,这实际上解决了我的问题
      【解决方案3】:

      正如@Nisha 已经指出的那样,您可能会收到此错误,因为SALES_PERSON_ID 是一个数字字段 - 您必须将其转换为字符串或(最好)加入另一个表以获得名称销售人员。

      此外,我相信您的查询中存在逻辑错误 - 在您的第一个 SELECT 中,您按 catagory_person_id is not null 过滤;这应该是sales_person_id is not null

      假设是这种情况,那么您可以使用CASE 语句来简化查询(您也可以使用DECODECOALESCE):

      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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-14
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多