开发者社区 > 大数据与机器学习 > 实时数仓 Hologres > 正文

Hologres这样子的行转列的数据 我一条id为445的过来 但是其余的字段 不想变成空?

Hologres这样子的行转列的数据 我一条id为445的过来 但是其余的字段 不想变成空?有什么办法吗 除了每个字段分开写入 ,STRING_AGG(distinct case when t3.id = 413 then t2.name end )
,STRING_AGG(distinct case when t3.id = 418 then t2.name end )
,STRING_AGG(distinct case when t3.id = 421 then t2.name end )
,STRING_AGG(distinct case when t3.id = 423 then t2.name end )
,STRING_AGG(distinct case when t3.id = 425 then t2.name end )
,STRING_AGG(distinct case when t3.id = 428 then t2.name end )
,STRING_AGG(distinct case when t3.id = 438 then t2.name end )
,STRING_AGG(distinct case when t3.id = 440 then t2.name end )
,STRING_AGG(distinct case when t3.id = 443 then t2.name end )
,STRING_AGG(distinct case when t3.id = 445 then t2.name end )

展开
收起
真的很搞笑 2024-01-04 10:02:10 115 0
2 条回答
写回答
取消 提交回答
  • 你可以使用COALESCE函数来处理这个问题。COALESCE函数会返回第一个非空值,如果所有值都为空,则返回NULL。这样,当某个字段没有对应的值时,它不会变成空。

    假设你的表名为t1,字段名为idname,你可以这样修改你的查询:

    SELECT 
        COALESCE(STRING_AGG(distinct case when t3.id = 413 then t2.name end), '') AS name_413,
        COALESCE(STRING_AGG(distinct case when t3.id = 418 then t2.name end), '') AS name_418,
        COALESCE(STRING_AGG(distinct case when t3.id = 421 then t2.name end), '') AS name_421,
        COALESCE(STRING_AGG(distinct case when t3.id = 423 then t2.name end), '') AS name_423,
        COALESCE(STRING_AGG(distinct case when t3.id = 425 then t2.name end), '') AS name_425,
        COALESCE(STRING_AGG(distinct case when t3.id = 428 then t2.name end), '') AS name_428,
        COALESCE(STRING_AGG(distinct case when t3.id = 438 then t2.name end), '') AS name_438,
        COALESCE(STRING_AGG(distinct case when t3.id = 440 then t2.name end), '') AS name_440,
        COALESCE(STRING_AGG(distinct case when t3.id = 443 then t2.name end), '') AS name_443,
        COALESCE(STRING_AGG(distinct case when t3.id = 445 then t2.name end), '') AS name_445
    FROM t1 t2
    JOIN t3 ON t2.id = t3.id
    GROUP BY t2.id
    

    这样,当某个字段没有对应的值时,它将返回一个空字符串,而不是NULL。

    2024-01-06 11:43:14
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    你可以使用COALESCE函数来处理这个问题。COALESCE函数会返回第一个非空值,如果所有值都为空,则返回NULL。这样,当某个字段没有对应的值时,它不会变成空。

    假设你的表名为t1,字段名为idname,你可以使用以下查询:

    SELECT 
        COALESCE(STRING_AGG(distinct case when t3.id = 413 then t2.name end), '') AS name1,
        COALESCE(STRING_AGG(distinct case when t3.id = 418 then t2.name end), '') AS name2,
        COALESCE(STRING_AGG(distinct case when t3.id = 421 then t2.name end), '') AS name3,
        COALESCE(STRING_AGG(distinct case when t3.id = 423 then t2.name end), '') AS name4,
        COALESCE(STRING_AGG(distinct case when t3.id = 425 then t2.name end), '') AS name5,
        COALESCE(STRING_AGG(distinct case when t3.id = 428 then t2.name end), '') AS name6,
        COALESCE(STRING_AGG(distinct case when t3.id = 438 then t2.name end), '') AS name7,
        COALESCE(STRING_AGG(distinct case when t3.id = 440 then t2.name end), '') AS name8,
        COALESCE(STRING_AGG(distinct case when t3.id = 443 then t2.name end), '') AS name9,
        COALESCE(STRING_AGG(distinct case when t3.id = 445 then t2.name end), '') AS name10
    FROM 
        t1 t2
    JOIN 
        t3 ON t2.id = t3.id
    WHERE 
        t3.id = 445;
    

    这个查询会根据id字段的值将name字段的值聚合到不同的列中。如果某个id没有对应的name值,那么对应的列将为空字符串。

    2024-01-04 17:19:08
    赞同 展开评论 打赏

本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975

相关产品

  • 实时数仓 Hologres
  • 相关电子书

    更多
    实时数仓Workshop(广州站)- 李佳林 立即下载
    阿里云实时数仓Hologres技术揭秘2.0 立即下载
    实时数仓Hologres技术实战一本通2.0版(下) 立即下载