【问题标题】:Generating a set of permutations in SQL Server without reverse duplicates在 SQL Server 中生成一组没有反向重复的排列
【发布时间】:2016-02-03 12:03:30
【问题描述】:

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

我只想要一种方式(第一种方式)。我该怎么做?

【问题讨论】:

    标签: sql sql-server cross-join


    【解决方案1】:

    我不完全清楚你的要求,但你只需要这个吗?

    SELECT 
        a.Col1, a.[differentcolumn],
        b.Col1, b.[differentcolumn] 
    FROM 
        [dbo].code a 
           INNER JOIN [dbo].code b ON a.[col1] < b.[col1]
    

    这将在col1 上将表连接到自身,但使用&lt; 意味着您将看不到左侧副本的col1 大于或等于右侧副本的值,这似乎是你想要的。

    【讨论】:

    • 谢谢,成功了,我不知道你可以在非数字字段上使用'
    • @MM92 是的,只是进行字母比较(好吧,我说“只是”;确切的结果取决于the collation,这在某些情况下可能很重要,例如“e”和“ é" 被视为相同,但在这种情况下并不重要:))
    猜你喜欢
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 2019-10-18
    相关资源
    最近更新 更多