gpt4 book ai didi

sql - 在 SQL Server 中生成排列的最优雅方式

转载 作者:行者123 更新时间:2023-12-04 10:47:48 25 4
gpt4 key购买 nike

给定下表:

Index | Element
---------------
1 | A
2 | B
3 | C
4 | D

我们想使用元素生成所有可能的排列(不重复)。
最终结果(跳过一些行)将如下所示:
  Results
----------
ABCD
ABDC
ACBD
ACDB
ADAC
ADCA

...

DABC
DACB
DBCA
DBAC
DCAB
DCBA

(24 Rows)

你会怎么做?

最佳答案

DECLARE @s VARCHAR(5);
SET @s = 'ABCDE';

WITH Subsets AS (
SELECT CAST(SUBSTRING(@s, Number, 1) AS VARCHAR(5)) AS Token,
CAST('.'+CAST(Number AS CHAR(1))+'.' AS VARCHAR(11)) AS Permutation,
CAST(1 AS INT) AS Iteration
FROM dbo.Numbers WHERE Number BETWEEN 1 AND 5
UNION ALL
SELECT CAST(Token+SUBSTRING(@s, Number, 1) AS VARCHAR(5)) AS Token,
CAST(Permutation+CAST(Number AS CHAR(1))+'.' AS VARCHAR(11)) AS
Permutation,
s.Iteration + 1 AS Iteration
FROM Subsets s JOIN dbo.Numbers n ON s.Permutation NOT LIKE
'%.'+CAST(Number AS CHAR(1))+'.%' AND s.Iteration < 5 AND Number
BETWEEN 1 AND 5
--AND s.Iteration = (SELECT MAX(Iteration) FROM Subsets)
)
SELECT * FROM Subsets
WHERE Iteration = 5
ORDER BY Permutation

Token Permutation Iteration
----- ----------- -----------
ABCDE .1.2.3.4.5. 5
ABCED .1.2.3.5.4. 5
ABDCE .1.2.4.3.5. 5
(snip)
EDBCA .5.4.2.3.1. 5
EDCAB .5.4.3.1.2. 5
EDCBA .5.4.3.2.1. 5

不久前首次发布 here

但是,最好使用更好的语言,例如 C# 或 C++。

关于sql - 在 SQL Server 中生成排列的最优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3621494/

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