You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL将位掩码的所有组合以行形式输出(替代列形式)

生成位掩码列的所有组合实现方案

方法1:基于现有表拆分后交叉连接

你的原表存储了每个位掩码列的非0值和全0行,先提取每个列的所有可能取值(包括0),再通过交叉连接生成所有组合:

SELECT 
    bm1_vals.bm1,
    bm2_vals.bm2,
    bm3_vals.bm3
FROM 
    (SELECT DISTINCT bm1 FROM your_table) bm1_vals
CROSS JOIN 
    (SELECT DISTINCT bm2 FROM your_table) bm2_vals
CROSS JOIN 
    (SELECT DISTINCT bm3 FROM your_table) bm3_vals
ORDER BY 
    bm1, bm2, bm3;
  • DISTINCT确保每个列只保留唯一合法取值,比如bm1只会得到0和1
  • CROSS JOIN生成三个集合的笛卡尔积,正好覆盖所有可能的组合
  • 最后的ORDER BY是可选操作,用来和你给出的示例结果顺序对齐

方法2:独立定义每个列的取值(更优方案)

如果不想依赖原表结构,直接定义每个位掩码列的合法取值,这种方式更可控,能避免原表数据缺失导致的问题:

SELECT 
    bm1, bm2, bm3
FROM 
    (SELECT 0 AS bm1 UNION ALL SELECT 1) bm1_vals
CROSS JOIN 
    (SELECT 0 AS bm2 UNION ALL SELECT 2) bm2_vals
CROSS JOIN 
    (SELECT 0 AS bm3 UNION ALL SELECT 4) bm3_vals
ORDER BY 
    bm1, bm2, bm3;
  • 每个子查询直接列出对应列的所有允许值,比如bm2固定取0或2
  • 新增位掩码列时,只需添加对应的CROSS JOIN子查询即可,扩展性强

内容的提问来源于stack exchange,提问作者Paul M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 02:54:58