Oracle 在select中填充所有值时,UNION ALL查询错误表达式必须具有与相应表达式相同的数据类型

Oracle 在select中填充所有值时,UNION ALL查询错误表达式必须具有与相应表达式相同的数据类型,oracle,plsql,oracle11g,Oracle,Plsql,Oracle11g,这可能是一个重复的问题,但我似乎找不到解决我的UNION ALL查询的方法。我在第12行不断收到此错误错误:ORA-01790:表达式必须与查询中此行对应的表达式具有相同的数据类型 但我不确定为什么我要将空值传递到select查询中,或者我需要使用NULL而不是空字符串 REM let us try UNION ALL REM 3-groupby U 2-groupby U 1-groupby U 0-groupby Select * from ( SELECT ch.channel_desc

这可能是一个重复的问题,但我似乎找不到解决我的UNION ALL查询的方法。我在第12行不断收到此错误
错误:ORA-01790:表达式必须与查询中此行对应的表达式具有相同的数据类型

但我不确定为什么我要将空值传递到select查询中,或者我需要使用NULL而不是空字符串

REM let us try UNION ALL
REM 3-groupby U 2-groupby U 1-groupby U 0-groupby
Select * from
(
SELECT ch.channel_desc, t.calendar_year, co.country_region, TO_CHAR(SUM(s.amount_sold), '9,999,999,999') SALES
FROM sh2.sales s, sh2.countries co, sh2.times t, sh2.channels ch
WHERE s.time_id=t.time_id 
 AND s.channel_id= ch.channel_id
 AND ch.channel_desc IN ('Direct Sales', 'Internet') 
 AND t.calendar_year IN ('2003') 
 AND co.country_region IN ('Europe') 
GROUP BY (ch.channel_desc, t.calendar_year, co.country_region)
UNION ALL
SELECT ch.channel_desc, t.calendar_year, ' ', TO_CHAR(SUM(s.amount_sold), '9,999,999,999') SALES
FROM sh2.sales s, sh2.countries co, sh2.times t, sh2.channels ch
WHERE s.time_id=t.time_id 
 AND s.channel_id= ch.channel_id
 AND ch.channel_desc IN ('Direct Sales', 'Internet') 
 AND t.calendar_year IN ('2003') 
 AND co.country_region IN ('Europe') 
GROUP BY (ch.channel_desc, t.calendar_year)
UNION ALL
SELECT ch.channel_desc, ' ', ' ', TO_CHAR(SUM(s.amount_sold), '9,999,999,999') SALES
FROM sh2.sales s, sh2.countries co, sh2.times t, sh2.channels ch
WHERE s.time_id=t.time_id 
 AND s.channel_id= ch.channel_id
 AND ch.channel_desc IN ('Direct Sales', 'Internet') 
 AND t.calendar_year IN ('2003') 
 AND co.country_region IN ('Europe') 
GROUP BY (ch.channel_desc)
UNION ALL
SELECT ' ', ' ', ' ', TO_CHAR(SUM(s.amount_sold), '9,999,999,999') SALES
FROM sh2.sales s, sh2.countries co, sh2.times t, sh2.channels ch
WHERE s.time_id=t.time_id 
 AND s.channel_id= ch.channel_id
 AND ch.channel_desc IN ('Direct Sales', 'Internet') 
 AND t.calendar_year IN ('2003') 
 AND co.country_region IN ('Europe') 
)
ORDER BY 1 desc, 2 desc, 3 desc;

将空字符串替换为NULL,从而解决了查询表达式错误


选择频道描述,t.日历年,空,TO_CHAR(销售总额),'99999999')销售额

是否为
日历年
数字?还是一根绳子?列名似乎对应一个数字。不过,您将其与
where
子句中的字符串进行比较。如果是数字,则需要为该列选择一个数值而不是空格。我敢打赌,您确实希望使用
分组集
,而不是使用不同的
group by
子句对基本相同的查询进行
联合。这样会更有效率。日历年是一个数字(4),因此可以只传入0而不是空字符串吗?找到了一个解决方案,而不是使用空字符串,我使用了
NULL
,并执行了查询