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

SQL如何从临时表中获取所有不重复的无序元素组合

通用无顺序去重组合SQL实现方案

实现逻辑

通过给每个元素分配唯一递增序号,递归拼接时仅加入序号大于当前组合最大序号的元素,天然保证组合内元素顺序固定,不会生成逆序重复的同元素组合,无需额外去重操作,支持最多16个元素的组合生成需求。

完整代码

测试建表语句

CREATE TABLE #Test 
(
ItemName VARCHAR(2)
);

INSERT INTO #Test (ItemName)
VALUES  ('x1'),
    ('x2'),
    ('x3'),
    ('x4');

组合生成查询语句

WITH RankedItems AS (
    -- 给所有元素分配唯一递增序号,适配任意命名规则的元素
    SELECT 
        ItemName,
        ROW_NUMBER() OVER(ORDER BY ItemName) AS rn
    FROM #Test
),
Combinations AS (
    -- 递归锚点:初始为单个元素的组合
    SELECT 
        rn AS max_rn,
        CAST(ItemName AS VARCHAR(200)) AS combination,
        1 AS length
    FROM RankedItems
    UNION ALL
    -- 递归拼接:仅加入序号更大的元素,避免生成重复组合
    SELECT 
        r.rn AS max_rn,
        CAST(c.combination + ', ' + r.ItemName AS VARCHAR(200)) AS combination,
        c.length + 1 AS length
    FROM Combinations c
    INNER JOIN RankedItems r ON r.rn > c.max_rn
)
-- 过滤单元素组合,按长度、内容排序和期望输出一致
SELECT combination
FROM Combinations
WHERE length >= 2
ORDER BY length, combination
OPTION (MAXRECURSION 100); -- 递归上限远高于16个元素的需求,可直接复用

输出结果

针对测试数据执行后输出完全符合要求:

x1, x2
x1, x3
x1, x4
x2, x3
x2, x4
x3, x4
x1, x2, x3
x1, x2, x4
x1, x3, x4
x2, x3, x4
x1, x2, x3, x4

扩展说明

16个元素场景下总组合数仅为65519条,查询性能无压力。如果元素命名规则特殊,仅需要调整RankedItems中ROW_NUMBER()的排序规则即可适配,无需修改后续逻辑。

内容的提问来源于stack exchange,提问作者Jeff Brady

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 18:27:03