如何根据范围从 1 到 69 的数字列表创建包含 5 个数字排列的列表?
How do I create a list of 5 number permutations based on a list of numbers ranging from 1-69?
我有一个 SQL 服务器数据库,其中包含 NM1-NM69 列及其在字段值中的相应编号:
NM1 | NM2 | NM3 | NM4 | NM5 |...... | NM69
------------------------------------------
1 | 2 | 3 | 4 | 5 |...... | 69
我正在尝试找出此列表的所有 5 个数字排列。我如何以简单易行(嗯..更容易)的方式做到这一点?
示例输出:
PM NM1 | PM NM2 | PM NM3 | PM NM4 | PM NM5 |
--------------------------------------------
68 | 2 | 55 | 43 | 52 |
编辑:我正在使用 SQL
您将数据 UNPIVOT 到一列中,然后 CROSS JOIN 五次。这是一个 SQL Fiddle 排列 5 列选择 3。SQL Fiddle
DECLARE @t TABLE (Field1 INT, Field2 INT, Field3 INT, Field4 INT, Field5 INT)
INSERT INTO @t VALUES (1,2,3,4,5)
; WITH cte AS (
SELECT u.FieldValue
FROM @t
UNPIVOT (
[FieldValue] FOR [FieldName] IN (
Field1, Field2, Field3, Field4, Field5
)
) u
)
SELECT
t1.FieldValue AS PermuteField1,
t2.FieldValue AS PermuteField2,
t3.FieldValue AS PermuteField3
FROM
cte AS t1 CROSS JOIN
cte AS t2 CROSS JOIN
cte AS t3
WHERE
t1.FieldValue <> t2.FieldValue AND
t1.FieldValue <> t3.FieldValue AND
t2.FieldValue <> t3.FieldValue
我有一个 SQL 服务器数据库,其中包含 NM1-NM69 列及其在字段值中的相应编号:
NM1 | NM2 | NM3 | NM4 | NM5 |...... | NM69
------------------------------------------
1 | 2 | 3 | 4 | 5 |...... | 69
我正在尝试找出此列表的所有 5 个数字排列。我如何以简单易行(嗯..更容易)的方式做到这一点?
示例输出:
PM NM1 | PM NM2 | PM NM3 | PM NM4 | PM NM5 |
--------------------------------------------
68 | 2 | 55 | 43 | 52 |
编辑:我正在使用 SQL
您将数据 UNPIVOT 到一列中,然后 CROSS JOIN 五次。这是一个 SQL Fiddle 排列 5 列选择 3。SQL Fiddle
DECLARE @t TABLE (Field1 INT, Field2 INT, Field3 INT, Field4 INT, Field5 INT)
INSERT INTO @t VALUES (1,2,3,4,5)
; WITH cte AS (
SELECT u.FieldValue
FROM @t
UNPIVOT (
[FieldValue] FOR [FieldName] IN (
Field1, Field2, Field3, Field4, Field5
)
) u
)
SELECT
t1.FieldValue AS PermuteField1,
t2.FieldValue AS PermuteField2,
t3.FieldValue AS PermuteField3
FROM
cte AS t1 CROSS JOIN
cte AS t2 CROSS JOIN
cte AS t3
WHERE
t1.FieldValue <> t2.FieldValue AND
t1.FieldValue <> t3.FieldValue AND
t2.FieldValue <> t3.FieldValue