gpt4 book ai didi

sql - 返回 SQL 中单个列中所有可能的值组合

转载 作者:行者123 更新时间:2023-12-03 04:11:25 26 4
gpt4 key购买 nike

如何从数据库“x”的同一单列中返回所有可能的值组合的列表?例如我有:

    col 1,
1
2
3
4

我想返回所有可能组合的列表,例如,

    1,2
1,3
1,4
2,3,
2,4
3,4

...

最佳答案

您还没有说明您正在使用哪种 RDBMS,或者是否要将组合限制为集合中的 2 个元素。

这是使用分层查询的 Oracle 答案:

SQL Fiddle

Oracle 11g R2 架构设置:

CREATE TABLE TEST ( COL ) AS
SELECT LEVEL FROM DUAL CONNECT BY LEVEL < 5;

查询 1:

SELECT SUBSTR(SYS_CONNECT_BY_PATH(COL, ','), 2) AS combination
FROM TEST
CONNECT BY PRIOR COL < COL

<强> Results :

| COMBINATION |
|-------------|
| 1 |
| 1,2 |
| 1,2,3 |
| 1,2,3,4 |
| 1,2,4 |
| 1,3 |
| 1,3,4 |
| 1,4 |
| 2 |
| 2,3 |
| 2,3,4 |
| 2,4 |
| 3 |
| 3,4 |
| 4 |

查询 2:

SELECT SUBSTR(SYS_CONNECT_BY_PATH(COL, ','), 2) AS combination
FROM TEST
WHERE LEVEL = 2
CONNECT BY PRIOR COL < COL AND LEVEL <= 2

<强> Results :

| COMBINATION |
|-------------|
| 1,2 |
| 1,3 |
| 1,4 |
| 2,3 |
| 2,4 |
| 3,4 |

以及使用递归 CTE 的 SQL Server 版本:

SQL Fiddle

MS SQL Server 2014 架构设置:

CREATE TABLE TEST ( COL INT );

INSERT INTO TEST
SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4;

查询 1:

WITH cte ( combination, curr ) AS (
SELECT CAST( t.COL AS VARCHAR(80) ),
t.COL
FROM TEST t
UNION ALL
SELECT CAST( c.combination + ',' + CAST( t.col AS VARCHAR(1) ) AS VARCHAR(80) ),
t.COL
FROM TEST t
INNER JOIN
cte c
ON ( c.curr < t.COL )
)
SELECT combination FROM cte

<强> Results :

| combination |
|-------------|
| 1 |
| 2 |
| 3 |
| 4 |
| 3,4 |
| 2,3 |
| 2,4 |
| 2,3,4 |
| 1,2 |
| 1,3 |
| 1,4 |
| 1,3,4 |
| 1,2,3 |
| 1,2,4 |
| 1,2,3,4 |

关于sql - 返回 SQL 中单个列中所有可能的值组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31070337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com