我在SQL Server中有一个类似于以下内容的表。所有nvarchar数据类型。
ID Price Supplier
515 1 A
516 2 A
517 3 A
515 1.1 B
516 1.9 B
我想放一个sql / storage程序,导致供应商对数据进行并排比较。因此按供应商拆分并按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?
答案 0 :(得分: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 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