2013-03-15 76 views
0

感謝您的幫助。這是前一個線程的延續。替換字段中的值

How to pivot data in SQL

我什麼我想要做的就是在產生的領域之一替換值(比方說PROJECT_ID)做這樣的事情。我希望這是簡單的事情。但這個項目還有很多。

select oc.ncr_no, 
    max(case when OC.LU_NAME = 'Project' then OC.KEY_REF end) PROJECT_ID, 
    max(case when OC.LU_NAME = 'SupplierInfo' then OC.KEY_REF end) SUPPLIER_ID, 
    max(case when OC.LU_NAME = 'PurchaseOrder' then OC.KEY_REF end) ORDER_NO, 
    max(case when OC.LU_NAME = 'PurchaseReceipt' then OC.KEY_REF end) PURCHASE_RECEIPT, 
    max(case when OC.LU_NAME = 'InventoryPart' then OC.KEY_REF end) INVENTORY_PART, 
    replace(PROJECT_ID,'PROJECT_ID=','') as PROJECT_ID 
from OC 
group by oc.ncr_no 

我用這個模式作爲示例(從SQL小提琴中拉出)。不幸的是我不知道如何保存它。

CREATE TABLE OC 
(
    [NCR_NO] int, 
    [LU_NAME] varchar(15), 
    [KEY_REF] varchar(33) 
); 

INSERT INTO OC ([NCR_NO], [LU_NAME], [KEY_REF]) 
VALUES 
    (100001, 'Project', 'PROJECT_ID=PROJECT1^'), 
    (100001, 'SupplierInfo', 'SUPPLIER_ID=UNIQUESUPPLIERNUMBER^'), 
    (100001, 'PurchaseOrder', 'ORDER_NO=UNIQUEORDERNO^'), 
    (100196, 'PurchaseReceipt', 'UNIQUE PURCHASE RECEIPT'), 
    (100511, 'InventoryPart', 'CONTRACT=UNIQUECONTRACTNO'); 
+2

歡迎來到Stack Overflow!請通過添加適當的標記(Oracle,SQL Server,MySQL等)來指定您要定位的RDBMS。可能會有利用不被普遍支持的語言或產品功能的答案。此外,通過使用特定的RDBMS標記它,您的問題可能會得到更適合回答的人的關注。 – Taryn 2013-03-15 15:00:42

回答

0

,如果你想在每KEY_REF=之前刪除一切現在還不清楚。如果是這樣,您可以使用:

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 
(
    select ncr_no, 
    LU_NAME, 
    substring(KEY_REF, charindex('=', key_ref)+1 , len(key_ref)) KEY_REF 
    from yourtable 
) src 
group by ncr_no; 

請參閱SQL Fiddle with Demo

注意:這是您可以使用的基本語法,但這可能會根據您使用的數據庫而變化。

+0

我猜他想提供位於等號右側的信息。 (KEY_REF,INSTR(KEY_REF,'='),LENGTH(KEY_REF)) – 2013-03-15 15:22:30

+0

@AHocevar您可以通過將KEY_REF替換爲SUBSTR來豐富您的查詢。這實際上取決於他們正在使用的數據庫產品。這可以通過很多不同的方式來完成,但是如果我們知道什麼數據庫會有幫助。 – Taryn 2013-03-15 15:23:46

+0

你說得對,我忽略了這個問題,認爲他在使用oracle – 2013-03-15 15:24:23