Текстовый агрегированный подзапрос в Oracle не работает

#sql #oracle

#sql #Oracle

Вопрос:

Я хочу выполнить агрегирование текста по подзапросу..

Сообщение об ошибке, которое я получаю, является

отсутствует В ключевом слове

Мой код

 Select
    DISTINCT(sh.order_date) as OrderDate,
    sup.supplier_name as SupplierName,
    sh.sales_document_num as OrderNumber,
    pro.product_code as SKU,
    pro.long_description_1 as ProductName,
    po.order_number as PONumber,
    sh.delivery_name as Name,
    sh.address1 as Address1,
    sh.address2 as Address2,
    sh.address3 as City,
    sh.address5 as StateProv,
    sh.POSTCODE as Postalcode,
    sh.country_code as Country,
    sh.inv_contact_telephone_1 as Phone,
    sh.inv_contact_email as Email,                             
    'TBC' as SupplierDesc,
    pi.order_required as Quantity,
    (select LISTAGG(LARGE_TEXT) from sales_entity_data  where entity_key1 = '20817159') as Personlization,
    'TBC' as LeadTime
from
    sales_header sh
    left join customer c on sh.customer_account = c.customer_account
    left join sales_item si on sh.sales_document_num = si.sales_document_num
    inner join po_header po on sh.sales_document_num = po.sales_document_num
    left join product pro on si.product_code = pro.product_code
    left join po_item pi on po.order_number = pi.order_number and si.product_code = pi.product_code 
     and si.order_quantity = pi.order_required
    left join supplier sup ON po.supplier_account = sup.supplier_account
where
    Sh.sales_document_num = '20817159' 
 

Любая помощь приветствуется

Комментарии:

1. Документация Oracle для LISTAGG

2. Спасибо, да, это работает.

3. DISTINCT это не функция, это часть SELECT DISTINCT и работает со всеми выбранными строками. Пропустите эти дополнительные скобки и просто напишите SELECT DISTINCT sh.order_date as OrderDate, ... , чтобы сделать код более понятным.

4. Спасибо, Ярл.. подойдет

Ответ №1:

Правильный синтаксис:

 select LISTAGG(LARGE_TEXT, ',') WITHIN GROUP (ORDER BY LARGE_TEXT)
---------------------------^ separator
--------------------------------^ ordering
 

Тем не менее, предел для LISTAGG() является результатом 2000 символов, поэтому вы не сможете агрегировать «большой» текст.