2013-03-15 77 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