在 SQL 服务器中生成一组没有反向重复的排列
Generating a set of permutations in SQL Server without reverse duplicates
Table Code
:
Col1
----
A1
A2
A3
B1
B2
C1
D1
D2
(我还有其他专栏)
我正在尝试创建排除自身的所有可能组合(即 COL1:A1 COL2:A1) 排除以相反的方式再次使用它(即 A1 A2、A2、A1)...他们要在单独的列中,并且还包括其他列。我是新手,请放轻松:)
到目前为止我有:
SELECT
a.Col1, a.[differentcolumn],
b.Col1, b.[differentcolumn]
FROM
[dbo].code a
CROSS JOIN
[dbo].code b
WHERE
a.[col1] != b.[col1]
这差不多了,但它给了我:
A1 A2
A2 A1
我只想要一种方式(第一种)。我该怎么做?
我不是很清楚你的要求,但是你只需要这个吗?
SELECT
a.Col1, a.[differentcolumn],
b.Col1, b.[differentcolumn]
FROM
[dbo].code a
INNER JOIN [dbo].code b ON a.[col1] < b.[col1]
这将在 col1
上将 table 连接到自身,但使用 <
意味着您将看不到左侧副本具有 [=11] 的值=] 大于等于右边的副本,好像是你想要的。
Table Code
:
Col1
----
A1
A2
A3
B1
B2
C1
D1
D2
(我还有其他专栏)
我正在尝试创建排除自身的所有可能组合(即 COL1:A1 COL2:A1) 排除以相反的方式再次使用它(即 A1 A2、A2、A1)...他们要在单独的列中,并且还包括其他列。我是新手,请放轻松:)
到目前为止我有:
SELECT
a.Col1, a.[differentcolumn],
b.Col1, b.[differentcolumn]
FROM
[dbo].code a
CROSS JOIN
[dbo].code b
WHERE
a.[col1] != b.[col1]
这差不多了,但它给了我:
A1 A2
A2 A1
我只想要一种方式(第一种)。我该怎么做?
我不是很清楚你的要求,但是你只需要这个吗?
SELECT
a.Col1, a.[differentcolumn],
b.Col1, b.[differentcolumn]
FROM
[dbo].code a
INNER JOIN [dbo].code b ON a.[col1] < b.[col1]
这将在 col1
上将 table 连接到自身,但使用 <
意味着您将看不到左侧副本具有 [=11] 的值=] 大于等于右边的副本,好像是你想要的。