Listagg函式轉換nvarchar2型別欄位結果為空,需使用to_char函式轉換欄位,然後再使用Listagg
阿新 • • 發佈:2019-01-27
Listagg函式功能:將一列值拼接成一行
Listagg在轉換number型別的列非常成功,但在轉換nvarchar2型別的列卻為空,後來發現nvarchar2型別的列需要使用to_char函式轉換一下,再使用Listagg函式就能成功轉換
表結構:
create table PRO_PRODUCT_HI_PRICE ( ID NVARCHAR2(36) not null, PRODUCT_ID NVARCHAR2(36), PRICE NUMBER(14,2), TYPE NVARCHAR2(36), PROJECT_ID NVARCHAR2(50), DOC_NUM NVARCHAR2(36), CREATE_TIME DATE, UNIT_CODE NVARCHAR2(36) )
資料:
1. Listagg一個number型別的列--price
select ph.product_id,listagg(ph.price||'元',';')within group( order by ph.create_time desc) asprice
from pro_product_hi_price ph group by ph.product_id
結果:
2. Listagg一個nvarchar2的列--doc_num
select ph.product_id,listagg(ph.doc_num,';') within group( order byph.create_time desc) as doc_num from pro_product_hi_price ph group by ph.product_id
結果:
3. 將nvarchar2使用to_char函式轉換後listagg
selectph.product_id,listagg(to_char(ph.doc_num),';')within group( order by ph.create_time desc) asdoc_num
from pro_product_hi_price ph group by ph.product_id
結果:
4. 使用Listagg合併兩列的值,現將兩列使用“||”拼接,然後再使用listagg函式
select ph.product_id,listagg(ph.price||'元,'||to_char(ph.doc_num),';') within group( order byph.create_time desc) as priceString from pro_product_hi_price ph group by ph.product_id
結果: