首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我在尝试加入表时会收到Oracle ORA-01790?

为什么我在尝试加入表时会收到Oracle ORA-01790?
EN

Stack Overflow用户
提问于 2021-05-04 17:43:02
回答 1查看 142关注 0票数 1

我使用两个表连接在一起生成一个新表,其中包含两个字段“预测”和“关闭”的总和,以及它的元数据。

我的问题是,因为我有一个条件,如果值是'Green‘,那么就插入一个'-’符号。直观地,当我对该列进行和时,它会给出一个错误“表达式必须具有与相应表达式”相同的数据类型。是否有一种方法可以在我的脚本中编写一个case语句来规避这个问题,或者有一个不同的解决方案?

Table1:

代码语言:javascript
运行
复制
chart_date | FLAG | MESSAGING | FORECAST  | CLOSED
21-JUL-20     NULL   BLUE           10       10
22-JUL-20     NULL   BLUE           10       20
23-JUL-20     NULL   BLUE           10       106
21-JUL-20     NULL   GREEN          -        356
22-JUL-20     NULL   GREEN          -        457
23-JUL-20     NULL   GREEN          -        65
21-JUL-20     NULL   RED            5        13
22-JUL-20     NULL   RED            5        223
23-JUL-20     NULL   RED            5        11

表2-它保存我们的静态数据:

代码语言:javascript
运行
复制
chart_date | FLAG | HEADER     | METRIC  | FORECAST
20-JUL-20     1      TYPE        BLUE        0
20-JUL-20      8      TYPE       GREEN       0  
20-JUL-20      9      TYPE       RED         0  

这里是我使用的代码:

代码语言:javascript
运行
复制
with t2
as (
select 
b.flag,
b.metric messaging,  
NVL(a.INCOMING,0)   INCOMING,
case when b.metric in 
('GREEN'
) then  '-' 
else to_char((NVL(round(a.Forecast,0),0))) end as Forecast  
from
DB1.TABLE2 b
inner join
DB1.TABLE1 a
on (a.messaging=b.metric)
where b.header='MESSAGING'
and a.messaging in ('RED','GREEN','BLUE' )
)
select flag,messaging, SUM(NVL(INCOMING,0)) AS CLOSED_SUM, SUM(NVL(FORECAST,0)) as FORECAST_SUM
from t2  group by flag, messaging, FORECAST 
union
select 
a.flag,a.metric,0,'0'
from DB1.TABLE2 a
left join
t2
on (t2.messaging=a.metric)
where t2.messaging is null
and a.header like 'MESSAGING'
and a.metric  in ('RED','GREEN','BLUE' )

,这是我得到的错误消息:

代码语言:javascript
运行
复制
ORA-01790: expression must have same datatype as corresponding expression
01790. 00000 -  "expression must have same datatype as corresponding expression"
*Cause:    
*Action:
Error at Line: 24 Column: 57

如您所见,它按日期输出每个类型,但不分组创建sum列。

--这是我想要的输出:

代码语言:javascript
运行
复制
FLAG | MESSAGING | FORECAST_SUM  | CLOSED_SUM 
1      RED           15                247
8      BLUE          30                136
9      GREEN         -                 878

没有重复,只是每种类型和它的预测字段和closed_sum字段之和这似乎是一个有点容易的修复,但我已经调试了几个小时,但没有效果,所以任何想法或建议都会有帮助!

EN

回答 1

Stack Overflow用户

发布于 2021-05-04 17:59:55

我认为联合中的数据类型需要匹配。我在守则中看到以下内容:

代码语言:javascript
运行
复制
a.flag,a.metric,0,'0'

你能试试下面这个来看看它是否有效吗?

代码语言:javascript
运行
复制
a.flag,a.metric,0,0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67389658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档