在SQL中从一列获取记录的唯一组合

时间:2016-11-15 11:53:10

标签: sql sql-server sql-server-2008

我的i / p是一个名为Color的列: -

Colour
Red
Blue 
White

我需要输出为: -

Red - Blue 
Red - White 
Blue - White 

如果我需要在一列和一列中输出,我应该如何编写SQL查询?两个不同的列。

3 个答案:

答案 0 :(得分:3)

你可以自我加入:

DECLARE @T TABLE (Colour VARCHAR(20))
INSERT @T VALUES ('Red'), ('Blue'), ('White');

SELECT  T1.Colour, 
        t2.Colour, 
        T1.Colour + ' - ' + T2.Colour AS InOneColumn
FROM    @T AS T1
        INNER JOIN @T AS T2
            ON T2.Colour > T1.Colour;

您只需要一个条件来确保您没有获得镜像组合,即Blue - WhiteWhite - Blue。在连接中使用大于运算符将确保这一点。

答案 1 :(得分:0)

select concat(t2.colour,'-',t1.colour) from table1 t1,table1 t2 where t1.colour>t2.colour order by t2.colour,t1.colour;

替换表名并尝试此操作。

答案 2 :(得分:0)

您可以使用内部联接& row_number窗口函数实现此目的。

SELECT  T1.COLOR
       ,T2.COLOR
       ,T1.COLOR +' - ' + T2.COLOR 
FROM 
        (SELECT ROW_NUMBER() OVER(ORDER BY COLOR) AS RN1,COLOR FROM COLOR) T1
         JOIN 
        (SELECT (ROW_NUMBER() OVER(ORDER BY COLOR)-1) AS RN2,COLOR FROM COLOR) T2
        ON T1.RN1 = T2.RN2 OR T1.RN1+1 = T2.RN2
ORDER BY T1.COLOR