如何基于单列生成多行组合?SQL表数据组合需求求解
解决方案
要实现同资产下不同RIGHTNAME的全量交叉组合,核心是先给重复的RIGHTNAME条目添加唯一序号后缀,再通过交叉连接生成所有可能的组合。以下是具体SQL实现:
步骤说明
- 给重复RIGHTNAME编号:使用窗口函数
ROW_NUMBER(),按RIGHTNAME分组、按资产权利起始日期排序,为每个重复条目生成唯一序号,并拼接成R1_1这类带标识的名称。 - 生成交叉组合:将每个RIGHTNAME的编号结果集单独筛选出来,通过
CROSS JOIN实现全量组合。
完整SQL代码
WITH numbered_rights AS ( SELECT RIGHTNAME || '_' || ROW_NUMBER() OVER (PARTITION BY RIGHTNAME ORDER BY ACQUISITIONBEGINDATE) AS right_with_id, RIGHTNAME FROM TEMP_RIGHT_ROLLUP_GROUP WHERE ASSETCODE = '10' -- 若需处理多资产可去掉此条件,后续组合时按资产分组即可 ) SELECT r1.right_with_id AS R1, r2.right_with_id AS R2, r3.right_with_id AS R3 FROM (SELECT right_with_id FROM numbered_rights WHERE RIGHTNAME = 'R1') r1 CROSS JOIN (SELECT right_with_id FROM numbered_rights WHERE RIGHTNAME = 'R2') r2 CROSS JOIN (SELECT right_with_id FROM numbered_rights WHERE RIGHTNAME = 'R3') r3;
输出结果
执行后将得到你期望的4种组合:
R1_1 R2_1 R3_1 R1_1 R2_1 R3_2 R1_2 R2_1 R3_1 R1_2 R2_1 R3_2
(注:R2仅有一条记录,因此序号为1;若后续新增R2条目,代码会自动适配生成对应序号的组合)
内容的提问来源于stack exchange,提问作者harsha
相关产品推荐
相关产品推荐

