我的数据看起来很像(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
创建一条记录,为Project
,SupplierInfo
等创建一列数据,其中包含唯一的Key_Ref
。假设表名是OC
。有人可以协助代码执行此操作吗?
答案 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
上述内容对于已知数量或有限数量的LU_NAME
值非常有效,如果您的数字未知,那么您将需要实现动态SQL,但该代码会因您的数据库而异。