我的i / p是一个名为Color的列: -
Colour
Red
Blue
White
我需要输出为: -
Red - Blue
Red - White
Blue - White
如果我需要在一列和一列中输出,我应该如何编写SQL查询?两个不同的列。
答案 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 - White
和White - 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