2016-02-29 177 views
-2

我有當前的數據是這樣的: this image1拆分數據

我有數據作爲image 1

我想要的數據是如下修改這樣 this image2

我想要的輸出作爲image 2 Oracle SQL Developer中使用SQL查詢。一個訂單ID的付款方式的副本應該放在不同的列中。

+1

哪些DBMS你真的使用。你不應該只標記所有這些。 –

+0

Oracle - sqldeveloper – Aaa

+0

SQL Developer是一個客戶端IDE。如果您使用它來訪問Oracle數據庫,則標記爲[tag:oracle]和[tag:sql]。 Oracle的版本(假設它實際上)也很重要;數據透視從11g可用,例如,您是否嘗試過使用它?使用格式化文本,而不是圖像也更好。 –

回答

0

你好。我假設你基本上在Oracle版本上工作。 我試圖在下面的代碼片段中複製場景。希望這個 幫助。

SELECT a.id, 
    a.ord_id, 
    a.price, 
    SUBSTR(wmsys.wm_concat(a.attr),1,instr(wmsys.wm_concat(a.attr),',',1)-1) att1, 
    SUBSTR(wmsys.wm_concat(a.attr),instr(wmsys.wm_concat(a.attr),',',1) +1,LENGTH(wmsys.wm_concat(a.attr))) att2 
FROM 
    (SELECT '[email protected]' AS id, 
    1     AS ord_id, 
    1000 price, 
    'master_card' attr 
    FROM dual 
    UNION ALL 
    SELECT '[email protected]' AS id, 1 AS ord_id,1000 price,'Other' attr FROM dual 
    UNION ALL 
    SELECT '[email protected]' AS id, 2 AS ord_id,1060 price,'aramax' attr FROM dual 
    UNION ALL 
    SELECT '[email protected]' AS id, 2 AS ord_id,1060 price,'fedex' attr FROM dual 
)a 
GROUP BY a.id, 
    a.ord_id, 
    a.price; 

----------------------------------OUTPUT--------------------------------- 

ID   ORD_ID PRICE ATT1   ATT2 
[email protected] 1 1000 master_card Other 
[email protected] 2 1060 aramax  fedex 

----------------------------------output------------------------------------- 
+0

非常感謝您的回答 – Aaa

+0

如果有幫助。你能否接受答案,這對其他人也有用。 –

+0

'WM_CONCAT'不是受支持/有文檔記錄的oracle功能,並且在所有Oracle實例上都不可用(它[在Oracle 12c中完全不可用](https://blogs.oracle.com/oracle-database-app-admin /項/ why_not_use_wm_concat))。此外,如果任何屬性包含逗號,則此解決方案將失敗(即返回不正確的值)。 – MT0

1
SELECT RegistrationId, 
     OrderId, 
     TotalPrice, 
     MAX(CASE rn WHEN 1 THEN online_attribute1 END) AS online_attribute1, 
     MAX(CASE rn WHEN 2 THEN online_attribute1 END) AS online_attribute2, 
     MAX(CASE rn WHEN 3 THEN online_attribute1 END) AS online_attribute3 
    SELECT RegistrationId, 
     OrderId, 
     TotalPrice, 
     online_attribute1, 
     ROW_NUMBER() 
      OVER (PARTITION BY RegistrationId, OrderId, TotalPrice 
        ORDER BY NULL) AS rn 
    FROM Data 
) 
GROUP BY RegistrationId, OrderId, TotalPrice 
+0

非常感謝您的回答 – Aaa