2016-09-23 39 views
0

嗨stackoverflow社區,sybase/sql自加入多行

我試圖做一個自我聯接,如果唯一的ID在Col 1是相同的。

表代碼:

CREATE TABLE #table (
    Unique_ID int, Product_code varchar(10) 
) 
INSERT INTO #table (Unique_ID, Product_code) VALUES (1111111111, 1)  
INSERT INTO #table (Unique_ID, Product_code) VALUES (1111111111, 2)  
INSERT INTO #table (Unique_ID, Product_code) VALUES (1111111111, 3)  
INSERT INTO #table (Unique_ID, Product_code) VALUES (2222222222, 4)  
INSERT INTO #table (Unique_ID, Product_code) VALUES (2222222222, 4)  
INSERT INTO #table (Unique_ID, Product_code) VALUES (3333333333, 5)  
INSERT INTO #table (Unique_ID, Product_code) VALUES (3333333333, 6)  
INSERT INTO #table (Unique_ID, Product_code) VALUES (3333333333, 6)  
INSERT INTO #table (Unique_ID, Product_code) VALUES (3333333333, 3)  

#table輸入:

Unique_ID Product_code 
1111111111  1  
1111111111  2  
1111111111  3  
2222222222  4  
2222222222  4  
3333333333  5  
3333333333  6  
3333333333  6  
3333333333  3  

期望#table輸出:

Unique_ID Product_code Product_code1 Product_code2 Product_code3 
1111111111  1    2    3   (Null)  
2222222222  4    4   (Null)   (Null) 
3333333333  5    6    6    3 

當前代碼(不確定如何比較由UNIQUE_ID每一行):

SELECT t1.Unique_ID, t1.Product_code, t2.Product_code AS [Product_code1] 
FROM #temp AS t1 
JOIN #temp AS t2 ON t1.Unique_ID = t2.Unique_ID 
ORDER BY t1.Unique_ID 

任何提示和/或幫助將由於要在每張結果行3個產品代碼不勝感激感謝

回答

0

試試這個。您需要一箇中間步驟,通過相同的列關聯不同的值:

select *, seq=identity(int) into #temp from #table order by Unique_ID, Product_code 
go 

SELECT t1.Unique_ID, t1.Product_code as p1, t2.Product_code as p2, t3.Product_code as p3, t4.Product_code as p4 
FROM #temp AS t1 
LEFT JOIN #temp AS t2 ON t1.Unique_ID = t2.Unique_ID and t2.seq = t1.seq+1 
LEFT JOIN #temp AS t3 ON t2.Unique_ID = t3.Unique_ID and t3.seq = t2.seq+1 
LEFT JOIN #temp AS t4 ON t1.Unique_ID = t4.Unique_ID and t4.seq = t3.seq+1 
where t1.seq = (select min(seq) from #temp where Unique_ID = t1.Unique_ID) 
ORDER BY t1.Unique_ID 
go 
+0

嘿羅布,感謝您的幫助!我設法使用你的代碼的想法來創建我需要的東西。 – henry91

0

,你必須做一個3路自連接。現在你有一個雙向自我加入,所以你必須再次加入#table

+0

我認爲您誤解了我的問題,或者它只是不清楚我寫的方式。無論哪種方式,我需要將具有相同Unique_ID的每個product_code移動到新列。我的代碼目前並沒有接近我想要做的事情。 – henry91

+0

xxxxxxxxxxxxxxxxxxxxx – RobV

+0

我想我確實 - 除了我錯過了,你可以有4列而不是3列。所以你需要一個4-weay自連接,它也需要是一個外連接。查看答案中的查詢(不適合在這裏) – RobV