2016-02-29 81 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