Oracle SQL:Sum Over Partition在Select中返回错误

时间:2017-06-20 07:12:56

标签: sql oracle select case partition

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

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

我的SQL(选择的一部分):

, 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

非常感谢您的任何帮助,
麦克

3 个答案:

答案 0 :(得分: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 ,它本质上是一个char而不是int。

<data android:scheme="http"
    android:host="example.org"
    android:pathPrefix="/app"/>

答案 1 :(得分: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 :(得分:0)

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

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

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