Oracle SQL:Select 中的 Sum Over Partition returns 错误
Oracle SQL: Sum Over Partition returns error in Select
我有一个更大的 Select
语句,它工作正常,直到我包含以下 returns 下面的错误。
仅使用 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
非常感谢您的帮助,
麦克
错误说明了一切。您使用的 ''
本质上是一个字符而不是整数。
, 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
正如错误消息指出的那样,您不能在 CASE 中混合使用不同的数据类型。例如这是错误的
select case when 1=1 then 2 else '' end from dual
在else
中使用null
或0或将then
表达式转换为字符串
由于原始列是整数,所以不能传递字符
, 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
我有一个更大的 Select
语句,它工作正常,直到我包含以下 returns 下面的错误。
仅使用 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
非常感谢您的帮助,
麦克
错误说明了一切。您使用的 ''
本质上是一个字符而不是整数。
, 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
正如错误消息指出的那样,您不能在 CASE 中混合使用不同的数据类型。例如这是错误的
select case when 1=1 then 2 else '' end from dual
在else
中使用null
或0或将then
表达式转换为字符串
由于原始列是整数,所以不能传递字符
, 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