根据列中的值将SQL表拆分为多个表
问题描述:
我在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?
答
你可以使用自联接:
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 JOIN
和COALESCE(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
对于SQL Server使用PIVOT – Donal 2014-09-04 19:27:32
一个ID有多少个供应商? – wdosanjos 2014-09-04 19:38:28