-1

我有看起来很像这样的数据(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提供一列数据,其中包含唯一的. 假设表名是. 有人可以协助代码执行此操作吗? ProjectSupplierInfoKey_RefOC

4

1 回答 1

4

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

如果您在没有数据透视函数的数据库中工作,则可以使用带有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,但该代码将根据您的数据库而有所不同。

于 2013-03-14T18:53:29.173 回答