2016-09-23 2 views
0

Привет StackOverflow сообщества,Sybase/SQL самостоятельно присоединиться несколько строк

Я пытаюсь сделать автообъединение если уникальный идентификатор в 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 

Любые намеки и/или помощь была бы оценена благодаря

ответ

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 коды продукта в результате строки, вы должны сделать 3-путь самостоятельно присоединиться. Прямо сейчас у вас есть двухстороннее самостоятельное присоединение, поэтому вы должны присоединиться к #table еще раз

+0

Я думаю, что вы неверно истолковали мой вопрос, или просто неясно, как я его написал. В любом случае мне нужно переместить каждый product_code с тем же уникальным идентификатором в новый столбец. Мой код в настоящее время не удаленно приближается к тому, что я хотел бы сделать. – henry91

+0

xxxxxxxxxxxxxxxxxxxxx – RobV

+0

Я думаю, что сделал - кроме того, что я пропустил, что у вас может быть 4, а не 3 столбца. Таким образом, вам нужно присоединиться к 4-мя слияниям, и оно также должно быть внешним соединением. См. Запрос в ответе (не подходит здесь) – RobV

Смежные вопросы