2016-09-23 4 views
0

こんにちはstackoverflowのコミュニティに参加し、SYBASE/SQLの自己複数の行

私は自己をやろうとしているが加わります。

表コード:

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 Product_code1 Product_code2 Product_code3 
1111111111  1    2    3   (Null)  
2222222222  4    4   (Null)   (Null) 
3333333333  5    6    6    3 

現在のコード(UNIQUE_IDによって各列を比較する方法が不明):#table出力希望

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

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者自己結合を行う必要があります。今すぐあなたは2者間の自己結合を持っているので、もう一度#tableに参加する必要があります

+0

私はあなたが私の質問を誤って解釈したと思います。どちらの方法でも、同じUnique_IDを持つ各product_codeを新しい列に移動する必要があります。私のコードは現在、私がやりたいことに遠く離れません。 – henry91

+0

xxxxxxxxxxxxxxxxxxxxx – RobV

+0

私は思った - 私はあなたが3つの列ではなく4つを持つことができなかったことを忘れた。したがって、4ウェイの自己結合が必要であり、外部結合である必要があります。答えのクエリを参照してください(ここには当てはまりません) – RobV

関連する問題