2016-09-23 40 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