将“尾部”附加到多个选择

时间:2019-05-06 12:23:10

标签: sql oracle

我有多个具有以下结构的结果行

 select data0, data1, ..., data30 from t0
 union all select data0, ..., data30 from t1
 ...

有多个结果行,其中许多行需要 对齐到30的长度。所以我要遵循

 union all select data0, data1, null, null, ..., null

是否有一种方便的方法可以自动执行这种操作 任务。我想要的是根据需要追加tail null。

我现在做什么

 with nulls as (
  select null as nul0, ..., null as nul30 from dual
 )

我被困在这一点上。如何将此空值附加到 结果行?空列数是已知的。

请进行适当的编辑,我通过移动设备输入

1 个答案:

答案 0 :(得分:2)

  

如何将此空值附加到结果行?

没有内置的解决方案可以生成任意数量的列的投影。

此解决方案将需要大量输入,但是您可以使用支持正则表达式搜索替换模式的文本编辑器将其半自动化。

with nulls as (
    select cast(null as varchar2(10)) as nul0
           , ...
           , cast(null as varchar2(10)) as nul30 
    from dual
) 
select t1.dat01
       , t1.dat02
       , nulls.nul03 as dat03
       , nulls.nul04 as dat04
       ...
       , nulls.nul30 as dat30
from t1
     cross join nulls 
union all
select t2.dat01
       , t2.dat02
       , t2.dat03
       , nulls.nul04 as dat04
       ...
       , nulls.nul30 as dat30
from t2
     cross join nulls