SQL-创建所有可能的组合

SQL-创建所有可能的组合,sql,sql-server,Sql,Sql Server,我有几个类,我想创建所有可能的组合 类表 输出不是这样,如果我有A,B作为输出,我也不想要B,A,等等 ColA Col2 A B A C A D A E B C B D B E C D C E D E 我不想使用游标。您可以通过添加一个条件来实现这一点: CREATE TABLE #a (a CHAR(1)); INSERT INTO #a VA

我有几个类,我想创建所有可能的组合

类表 输出不是这样,如果我有A,B作为输出,我也不想要B,A,等等

ColA    Col2 
A        B
A        C
A        D
A        E
B        C
B        D
B        E
C        D
C        E
D        E

我不想使用游标。

您可以通过添加一个条件来实现这一点:

CREATE TABLE #a (a CHAR(1));
INSERT INTO #a VALUES ('A');
INSERT INTO #a VALUES ('B');
INSERT INTO #a VALUES ('C');
INSERT INTO #a VALUES ('D');
INSERT INTO #a VALUES ('E');

SELECT a.a, b.a FROM #a a CROSS JOIN #a b
--If you do not need the same combinations such as AA then do like that
SELECT a.a, b.a FROM #a a CROSS JOIN #a b  WHERE a.a <> b.a
select c1.cola as col1, c2.cola as col2
from class c1 join
     class c2
     on c1.cola < c2.cola;
试试这个

DECLARE @t TABLE ( ID CHAR(1) )

INSERT  INTO @t VALUES  ( 'A' )
INSERT  INTO @t VALUES  ( 'B' )
INSERT  INTO @t VALUES  ( 'C' )
INSERT  INTO @t VALUES  ( 'D' )
INSERT  INTO @t VALUES  ( 'E' )

;WITH    cte
          AS ( SELECT   ID ,
                        ROW_NUMBER() OVER ( ORDER BY (SELECT 1) ) AS rn
               FROM     @t
             )
    SELECT  t1.ID ,
            t2.ID
    FROM    cte t1
            JOIN cte t2 ON t2.rn > t1.rn
    ORDER BY t1.ID ,
            t2.ID

要创建上面提供的类的所有可能组合。从_表t1交叉连接_表t2中选择t1.colA作为colA,t2.colA作为Col2;我只想要这两个{ab,ba}中的一行。。和交换规则AB=BAThis一样,这个答案绝对不应该被否决。
DECLARE @t TABLE ( ID CHAR(1) )

INSERT  INTO @t VALUES  ( 'A' )
INSERT  INTO @t VALUES  ( 'B' )
INSERT  INTO @t VALUES  ( 'C' )
INSERT  INTO @t VALUES  ( 'D' )
INSERT  INTO @t VALUES  ( 'E' )

;WITH    cte
          AS ( SELECT   ID ,
                        ROW_NUMBER() OVER ( ORDER BY (SELECT 1) ) AS rn
               FROM     @t
             )
    SELECT  t1.ID ,
            t2.ID
    FROM    cte t1
            JOIN cte t2 ON t2.rn > t1.rn
    ORDER BY t1.ID ,
            t2.ID