2016-11-15 65 views
-1

我的I/P是一列名爲Color: -獲得獨特結合記錄從一列在SQL

Colour 
Red 
Blue 
White 

我需要輸出爲: -

Red - Blue 
Red - White 
Blue - White 

我應該如何寫SQL查詢爲同樣考慮如果我需要輸出在一列&兩個不同的列。

回答

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

替換表名並嘗試此操作。

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。在連接中使用大於運算符將確保這一點。

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