SQL Developer 查询将多列数据组合成单列

问题描述 投票:0回答:1

我想使用类似于 LISTAGG 函数的东西,但跨列而不是行。也就是说,将满足特定条件的多列中保存的值连接到单个列中,并用分号 (;) 分隔。

表格数据示例:

身份证 第一天 第二天 第三天 第四天
啊啊啊 弗兰克 无名 无名 鲍勃
啊啊啊 希拉 弗兰克 无名 扎克

我想返回这样的内容,忽略所有包含“无名称”的列:

身份证 列表
啊啊啊 弗兰克;鲍勃
啊啊啊 希拉;弗兰克;扎克

我尝试过改编 LISTAGG,看看是否可以解决这个问题,但没有任何乐趣。

不确定我是否可以将 CONCAT 与条件一起使用,即忽略“无名称”,将它们从串联中排除

该表有一列代表一年中的每一天(365 或 366 列加上 ID),因此宁愿不要使用很长的 case 语句将所有值拉入单个字段。

sql concatenation listagg
1个回答
0
投票

生成动态sql查询

  DO
    $$
    DECLARE
      col_list TEXT;
    BEGIN
      -- Generate the dynamic column list with NULLIF for each column
      SELECT string_agg('NULLIF(' || column_name || ', ''No name'')', ', ')
      INTO col_list
      FROM information_schema.columns
      WHERE table_name = 'your_table' 
        AND column_name LIKE 'DAY%'; -- Assuming your columns are named DAY1, DAY2, etc.
    
      -- Execute the dynamic query
      EXECUTE 'SELECT ID, CONCAT_WS('';'', ' || col_list || ') AS LIST FROM your_table';
    END
    $$;
© www.soinside.com 2019 - 2024. All rights reserved.