【问题标题】:Oracle SQL: Sum Over Partition returns error in SelectOracle SQL:Sum Over Partition 在 Select 中返回错误
【发布时间】:2017-11-22 14:15:45
【问题描述】:

我有一个更大的 Select 语句,它可以正常工作,直到我包含以下返回以下错误的语句。
仅使用 Sum 部分也可以,但我只需要在每个 AID 的第一行使用它,这就是我在这里使用行号的原因。

谁能告诉我我在这里做错了什么?
问题是否可能是 Sum 和 Partition 指的是我在 Select 中加入的两个不同的表?

我的 SQL(Select 的一部分):

, CASE 
    WHEN ROW_NUMBER() OVER (PARTITION BY dp.SHIPPER_ID ORDER BY di.AID) = 1 THEN (SUM(di.SHIPPED_UNITS) OVER (PARTITION BY dp.SHIPPER_ID))
    ELSE '' 
END AS Gesamtmenge

错误信息:

ORA-00932: inconsistent datatypes: expected NUMBER got CHAR

非常感谢您的帮助,
迈克

【问题讨论】:

  • shipped_units 是类型号吗?
  • @RLOG:是的,是型号。
  • 使用 null 代替 ''
  • @MiloBellano:非常感谢 - 效果很好!如果您将其发布为答案,我会接受。 :)
  • 乐于助人! :) 如果您想接受,我已经发布了答案。谢谢老哥!

标签: sql oracle select case partition


【解决方案1】:

由于原始列是整数,所以不能传递字符

, CASE 
  WHEN ROW_NUMBER() OVER (PARTITION BY dp.SHIPPER_ID ORDER BY di.AID) = 1 THEN 
 (SUM(di.SHIPPED_UNITS) OVER (PARTITION BY dp.SHIPPER_ID))
 ELSE NULL
END AS Gesamtmenge

【讨论】:

    【解决方案2】:

    正如错误消息指出的那样,您不能在 CASE 中混合不同的数据类型。例如这是错误的

    select case when 1=1 then 2 else '' end from dual
    

    else 中使用null 或0 或将then 表达式转换为字符串

    【讨论】:

      【解决方案3】:

      错误说明了一切。您正在使用'',它本质上是一个字符而不是整数。

      , CASE 
          WHEN ROW_NUMBER() OVER (PARTITION BY dp.SHIPPER_ID ORDER BY di.AID) = 1 THEN (SUM(di.SHIPPED_UNITS) OVER (PARTITION BY dp.SHIPPER_ID))
          ELSE NULL 
      END AS Gesamtmenge
      

      【讨论】:

      • 非常感谢!有用。米洛也发布了这个。
      • 好。我错过了 2 分钟 :)
      猜你喜欢
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多