行类型的聚合列



当rowtype和聚合rowtype具有补码信息时,我想过滤它们的列。所以我的数据看起来是这样的:

|col1|rowcol                          |
|----|--------------------------------|
|1   |{col1=2, col2=null, col3=4}     |
|1   |{col1=null, col2=3, col3=null}  |
|2   |{col1=7, col2=8, col3=null}     |
|2   |{col1=null, col2=null, col3=56} |
|3   |{col1=1, col2=3, col3=7}        |

以下是一些代码,您可以使用这些代码来获得一个工作示例:


select col1, cast(rowcol as row(col1 integer, col2 integer, col3 integer))
from (
values 
(1, row(2,null,4)),
(1, row(null,3,null)),
(2, row(7,8,null)),
(2, row(null,null,56)),
(3, row(1,3,7)) 
) 
AS x (col1, rowcol)

我预计结果如下:

|col1|rowcol                         |
|----|-------------------------------|
|1   |{col1=2, col2=3, col3=4}       |
|2   |{col1=7, col2=8, col3=56}      |
|3   |{col1=1, col2=3, col3=7}       |

也许有人能帮我…

提前感谢

您需要按col1对它们进行分组,并进行处理以合并非null,例如使用max:

-- sample data
WITH dataset (col1, rowcol) AS (
VALUES  
(1, row(2,null,4)),
(1, row(null,3,null)),
(2, row(7,8,null)),
(2, row(null,null,56)),
(3, row(1,3,7)) 
) 
--query
select col1,
cast(row(max(r.col1), max(r.col2), max(r.col3)) as row(col1 integer, col2 integer, col3 integer)) rowcol
from (
select col1,
cast(rowcol as row(col1 integer, col2 integer, col3 integer)) r
from dataset
)
group by col1
order by col1 -- for ordered output

输出:

col1rowcol
1{col1=2,col2=3,col3=4}
2{col1=7,col2=8,col3=56}
3{col1=1,col2=3,col3=7}

相关内容

  • 没有找到相关文章

最新更新