如何在SQL中透视数据

时间:2013-03-14 18:46:35

标签: sql pivot

我的数据看起来很像(3列数据),遗憾的是我无法正常显示

NCR NO  LU_NAME           KEY_REF
100001  Project           PROJECT_ID=ID#^
100001  SupplierInfo      SUPPLIER_ID=UNIQUESUPPLIERNUMBER^
100001  PurchaseOrder     ORDER_NO=UNIQUEORDERNO^
100196  PurchaseReceipt   UNIQUE PURCHASE RECEIPT
100511  InventoryPart     CONTRACT=UNIQUECONTRACTNO

我想要的是为每个NCR number创建一条记录,为ProjectSupplierInfo等创建一列数据,其中包含唯一的Key_Ref。假设表名是OC。有人可以协助代码执行此操作吗?

1 个答案:

答案 0 :(得分:4)

这种类型的数据转换称为 pivot ,某些数据库产品具有可以为您执行此操作的功能。

如果您在没有数据透视功能的数据库中工作,那么您可以使用带有CASE表达式的聚合函数:

select ncr_no,
  max(case when LU_NAME = 'Project' then KEY_REF end) Project,
  max(case when LU_NAME = 'SupplierInfo' then KEY_REF end) SupplierInfo,
  max(case when LU_NAME = 'PurchaseOrder' then KEY_REF end) PurchaseOrder,
  max(case when LU_NAME = 'PurchaseReceipt' then KEY_REF end) PurchaseReceipt,
  max(case when LU_NAME = 'InventoryPart' then KEY_REF end) InventoryPart
from yourtable
group by ncr_no

请参阅SQL Fiddle with Demo

上述内容对于已知数量或有限数量的LU_NAME值非常有效,如果您的数字未知,那么您将需要实现动态SQL,但该代码会因您的数据库而异。