2014-09-04 110 views
0

我在SQL Server中有一個如下所示的表。所有nvarchar數據類型。根據列中的值將SQL表拆分爲多個表

ID  Price  Supplier 
515  1   A 
516  2   A 
517  3   A 
515  1.1   B 
516  1.9   B 

和我想把一個SQL /存儲過程,其通過由供應商數據的側比較結果在側。所以按供應商分類並按ID進行比較。

ID  Price  Supplier ID2 price2 Supplier2 
515  1   A  515 1.1 B 
516  2   A  516 1.9 B 
517  3   A 

表中的供應商數量始終是2 供應商名稱可以改變的數據來表是動態的。 可能是供應商2數據完全丟失的情況。

如何爲此添加一個sql?

+1

對於SQL Server使用PIVOT – Donal 2014-09-04 19:27:32

+0

一個ID有多少個供應商? – wdosanjos 2014-09-04 19:38:28

回答

2

你可以使用自聯接:

SELECT a.* 
     ,b.ID ID2 
     ,b.Price Price2 
     ,b.Supplier Supplier2 
FROM Table1 a 
LEFT JOIN Table1 b 
    ON a.ID = b.ID 
    AND a.Supplier <> b.Supplier 
WHERE a.Supplier = 'a' 

演示:SQL Fiddle

這假定供應商A總是存在的,如果不是,你可以使用一個FULL JOINCOALESCE(a.ID,b.ID)的情況。

更新:由於A是一個樣本值和實際值可以改變,創造了ROW_NUMBER()將允許您使用自連接方法:

;with cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Supplier) RN 
       FROM Table1) 
SELECT a.ID 
     ,a.Price 
     ,a.Supplier 
     ,b.ID ID2 
     ,b.Price Price2 
     ,b.Supplier Supplier2 
FROM cte a 
LEFT JOIN cte b 
    ON a.ID = b.ID 
    AND a.Supplier <> b.Supplier 
WHERE a.RN = 1 

演示:SQL Fiddle

+0

不一定供應商'a'將永遠在那裏。 A和B只是作爲例子。來到桌上的數據是動態的。 – Cannon 2014-09-04 19:35:41

+0

@buffer_overflow值的數量也是動態的,還是隻有2? – 2014-09-04 19:39:09

+0

表中總會有兩個供應商。 – Cannon 2014-09-04 19:40:33

相關問題