附加两个表 - Union 在 SQL (Teradata) 中不起作用

Append two tables - Union not working in SQL (Teradata)

我是 SQL 的初学者。我正在使用 Teradata。我们正在尝试将数据整合在一起,以比较实际值与预测值。

这是我的代码:

select 
'Actuals' as fc_version,
A.tra_fiscal_year as fiscal_year,
A.tra_fiscal_week as fiscal_week,
A.tra_allocation_category_code as category,
A.tra_grand_pricing_sales_channel as grandparent_channel,
D.fc_prod_id,
coalesce(
case
when A.tra_ticket_product_code like 'A%' then 'Total'
else null
end,

case
when A.tra_grand_pricing_sales_channel = 'INMKT' Then 'In Market'
else 'All Other'
end )
as fc_sales_channel,

sum(A.tra_ticket_quantity) as units_sold,

from ((pd_plan_forecast_db.adm_rev_detail A
left outer join
pd_plan_forecast_db.adm_rev_prod_code_to_fc_id B
on (A.tra_ticket_product_code = B.product_code))
left outer join
pd_plan_forecast_db.adm_rev_ticket_code_to_fc_id C
on (A.tra_ticket_code = C.ticket_code)
left outer join
pd_plan_forecast_db.adm_rev_fc_prod_info D
on (coalesce(B.fc_prod_id, C.fc_prod_id) = D.fc_prod_id))

group by 1, 2, 3, 4, 5, 6, 7

union

select fc_version, fiscal_year, fiscal_week, category, null as grandparent_channel, fc_prod_id, fc_sales_channel, sum(units_sold) as units_sold
from pd_plan_forecast_db.adm_rev_fc
where fiscal_year = 2017 and fiscal_week = 1
group by 1,2,3,4,5,6,7

如果将第一部分粘贴到并集之前,它的结果是正确的。联合之后的第二部分也是如此。

但是整个代码一起给出了错误: SELECT失败。 [3654] 相应的 select-list 表达式不兼容。

以下是我使用的表格的大致概念。

两个部分(顶部和底部)的列数必须相同,数据类型也必须相同。

据我所知,顶部查询中有 9 列,底部查询中有 8 列。

UPD:作者的修复是在下面的查询中将 null 转换为空字符串。

拖车中的列数应该相同 select 并且(两个 select 中的数字似乎都是 8)但是
在你的联盟中,你不应该在第二个 select

中使用别名
select 
'Actuals' as fc_version,
A.tra_fiscal_year as fiscal_year,
A.tra_fiscal_week as fiscal_week,
A.tra_allocation_category_code as category,
A.tra_grand_pricing_sales_channel as grandparent_channel,
D.fc_prod_id,
coalesce(
case
when A.tra_ticket_product_code like 'A%' then 'Total'
else null
end,

case
when A.tra_grand_pricing_sales_channel = 'INMKT' Then 'In Market'
else 'All Other'
end )
as fc_sales_channel,

sum(A.tra_ticket_quantity) as units_sold,

from ((pd_plan_forecast_db.adm_rev_detail A
left outer join
pd_plan_forecast_db.adm_rev_prod_code_to_fc_id B
on (A.tra_ticket_product_code = B.product_code))
left outer join
pd_plan_forecast_db.adm_rev_ticket_code_to_fc_id C
on (A.tra_ticket_code = C.ticket_code)
left outer join
pd_plan_forecast_db.adm_rev_fc_prod_info D
on (coalesce(B.fc_prod_id, C.fc_prod_id) = D.fc_prod_id))

group by 1, 2, 3, 4, 5, 6, 7

union

select 
    fc_version
    , fiscal_year
    , fiscal_week
    , category
    , null 
    , fc_prod_id
    , fc_sales_channel
    , sum(units_sold) 
from pd_plan_forecast_db.adm_rev_fc
where fiscal_year = 2017 and fiscal_week = 1
group by 1,2,3,4,5,6,7