SQL多列查询需求:生成多组编码-值列适配Looker维度
解决方案
首先修正原SQL的语法错误(移除SELECT子句末尾列的多余逗号),再通过CTE + 窗口函数 + 条件聚合实现多组unique_code_n&value_n列的生成,适配Looker的维度拖拽需求:
WITH combined_data AS ( -- 整合符合要求的基础数据,避免重复unique_code SELECT type_code_1 AS unique_code, product_id, type_id, value FROM Table1 UNION SELECT type_code_2 AS unique_code, product_id, type_id, value FROM Table2 WHERE type_code_2 NOT IN (SELECT DISTINCT type_code_1 FROM Table1) ), ranked_data AS ( -- 给每个product_id+type_id组合下的unique_code排序,生成组序号 SELECT product_id, type_id, unique_code, value, ROW_NUMBER() OVER (PARTITION BY product_id, type_id ORDER BY unique_code) AS rn FROM combined_data ) SELECT product_id, type_id, -- 生成第一组字段 MAX(CASE WHEN rn = 1 THEN unique_code END) AS unique_code_1, MAX(CASE WHEN rn = 1 THEN value END) AS value_1, -- 生成第二组字段 MAX(CASE WHEN rn = 2 THEN unique_code END) AS unique_code_2, MAX(CASE WHEN rn = 2 THEN value END) AS value_2, -- 生成第三组字段,可按需扩展 MAX(CASE WHEN rn = 3 THEN unique_code END) AS unique_code_3, MAX(CASE WHEN rn = 3 THEN value END) AS value_3, -- 如需更多组,继续复制上述结构并修改序号即可 MAX(CASE WHEN rn = 4 THEN unique_code END) AS unique_code_4, MAX(CASE WHEN rn = 4 THEN value END) AS value_4 FROM ranked_data GROUP BY product_id, type_id;
关键逻辑说明
combined_dataCTE:完成原需求的去重数据合并,确保unique_code无重复。ranked_dataCTE:通过ROW_NUMBER()窗口函数,给同一product_id+type_id下的每条数据分配组序号,用于后续列转换。排序规则可通过ORDER BY调整(比如按value排序)。- 条件聚合生成多列:利用
MAX(CASE...)将行数据转成列,每对unique_code_n和value_n对应一组维度字段,直接支持Looker的拖拽选择。
扩展说明
如果需要更多组字段,只需复制MAX(CASE...)的代码块,将序号rn = N和别名unique_code_N/value_N同步递增即可。
内容的提问来源于stack exchange,提问作者avonturier
相关产品推荐
相关产品推荐

