我需要格式化表格中的数据,所以我将其复制到另一个表格,而复制时我正在格式化它。 现在确定如何做到这一点。 原表:
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
它可以是同一个表或不同的表。
我不知道该怎么做。
答案 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
...那么您可能需要进行一些调整以满足您尚未完全定义的要求。