Oracle:需要将数据从一个表复制到另一个表并在复制时对其进行格式化

时间:2017-01-26 17:17:56

标签: sql oracle

我需要格式化表格中的数据,所以我将其复制到另一个表格,而复制时我正在格式化它。 现在确定如何做到这一点。 原表:

sales_offer_id sales_offer_name, sales_offer_description   PRIORITY ADE_PRIORITIZED deployment_date FROM_ENV
121        SO121        SO121 Desc121        111      Y     01-JAN-17   0
123        SO1          SO1 Desc1            111      Y     01-JAN-01   0
123        SO1          SO1 Desc2            111      Y     01-FEB-17   2
123        SO3          SO1 Desc1            111      Y     01-JAN-17   3
123        SO2          SO1 Desc1            111      Y     21-JAN-17   1
987        SO1          SO1_Desc1            111      Y     22-JAN-17   3

我的最终数据应该如下:

sales_offer_id sales_offer_name,                    sales_offer_description             PRIORITY      ADE_PRIORITIZED deployment_date FROM_ENV
121        SO121                            SO121 Desc121                  111          Y       01-JAN-17   0
123        SO1;SO3 eff(01/01/17);SO2 eff(01/21/17)  SO1 Desc1;SO1 Desc2 eff(02/01/17)  111          Y       01-FEB-17   0
987        SO1                          SO1_Desc1                  111          Y       22-JAN-17   3

它可以是同一个表或不同的表。

我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

尽量避免PL/SQL这样的工作。从Oracle文档中了解String aggregation techniques

e.g。如果您可以使用 Oracle 11g ,那么您的解决方案应该是

select sales_offer_id
     , listagg(sales_offer_name||' eff('||deployment_date   ||')' , '|') 
        within group (order by sales_offer_id) as sales_offer_description
     , PRIORITY
     , ADE_PRIORITIZED
     , max(FROM_ENv)
     , max(deployment_date)     
-- your data sample
from (
      select 121                   sales_offer_id
           , 'SO121'               sales_offer_name
           , 'SO121 Desc121'       sales_offer_description
           , 111                   PRIORITY 
           , 'Y'                   ADE_PRIORITIZED
           , '01-JAN-17'           deployment_date
           , 0                     FROM_ENV
                                                                     from dual
union select 123, 'SO1'  , 'SO1 Desc1'    , 111, 'Y', '01-JAN-01', 0 from dual
union select 123, 'SO1'  , 'SO1 Desc2'    , 111, 'Y', '01-FEB-17', 2 from dual
union select 123, 'SO3'  , 'SO1 Desc1'    , 111, 'Y', '01-JAN-17', 3 from dual
union select 123, 'SO2'  , 'SO1 Desc1'    , 111, 'Y', '21-JAN-17', 1 from dual
union select 987, 'SO1'  , 'SO1_Desc1'    , 111, 'Y', '22-JAN-17', 3 from dual
) group by sales_offer_id
     , PRIORITY
     , ADE_PRIORITIZED

...那么您可能需要进行一些调整以满足您尚未完全定义的要求。