1. 程式人生 > >Listagg函式轉換nvarchar2型別欄位結果為空,需使用to_char函式轉換欄位,然後再使用Listagg

Listagg函式轉換nvarchar2型別欄位結果為空,需使用to_char函式轉換欄位,然後再使用Listagg

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

結果: