根据Column中的值将SQL表拆分为多个表

时间:2014-09-04 19:21:21

标签: sql sql-server

我在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?

1 个答案:

答案 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 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

相关问题