-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

私が欲しいのは、それぞれに 1 つのレコードと、一意の を含む 、などの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 に答える