使用 UNION 子句时增加一列

Increment a column when using a UNION clause

我有以下查询:

select row_number() over (order by 1) as id,"-1" AS StatusCode,"Not informed" AS StatusLibelle
union
select row_number() over (order by 1) as id,"0" AS StatusCode,"Off" AS StatusLibelle
union
select row_number() over (order by 1) as id,"1" AS StatusCode,"On" AS StatusLibelle

当我尝试在 hive 上查询它时,我得到以下结果

id StatusCode StatusLibelle
1  -1         Not informed
1   0         Off
1   1         On

这是我的预期输出,id 列应该递增:

id StatusCosqlde StatusLibelle
1  -1         Not informed
2   0         Off
3   1         On

尝试以下操作:

select row_number() over (order by 1) as id,"-1" AS StatusCode,"Not informed" AS StatusLibelle
union
select row_number() over (order by 1) + 1 as id,"0" AS StatusCode,"Off" AS StatusLibelle
union
select row_number() over (order by 1) + 2 as id,"1" AS StatusCode,"On" AS StatusLibelle

为什么要使用 row_number()

select 1 as id, -1 AS StatusCode, 'Not informed' AS StatusLibelle
union all
select 2 as id, 0 AS StatusCode, 'Off' AS StatusLibelle
union all
select 3 as id, 1 AS StatusCode, 'On' AS StatusLibelle

此外,没有理由使用 UNION,这会产生删除重复项的开销。而且,StatusCode 看起来像一个数字,所以 return 它是一个数字,而不是字符串。