#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 символов, поэтому вы не сможете агрегировать «большой» текст.