Как добавить запятую (,) ко всем строкам вывода, кроме последней строки вывода в Oracle SQL?

Пример запроса, над которым я работаю

SELECT DISTINCT CHR(39) || ltrim(MATNR,0) || CHR(39) AS GLOBE_MATERIAL_ID_LIST
FROM PR1_SOAINFRA.WLI_NESOA2_REPORTING_ARCHIVE,  
    XMLTABLE( '/_-GLB_-OGTX_DESADV01_CUST_ASN/IDOC/E1EDK08/E1EDP07/E1EDP09'  
              PASSING XMLTYPE(data_value,871)  
              COLUMNS  
              MATNR varchar2(2000) path 'MATNR'  
            ) 
WHERE ERRORCODE IS NOT NULL AND BUSINESSID = '0000000382153210-E9APRR3103';

Выход:

'12352682'  
'12351436'  
'12351434'  
'12350683'  

Желаемый результат (без запятой в конце последней строки):

'12352682',  
'12351436',  
'12351434',  
'12350683'  
3
Veeresh 2 Янв 2018 в 03:28

2 ответа

Лучший ответ

Публикуя мои комментарии как отдельный ответ, подзапрос упорядочит числа, а внешний запрос добавит запятую на основе rownum и вернет результат в порядке убывания

select GLOBE_MATERIAL_ID_LIST || case when rownum > 1 then ',' else '' end as GLOBE_MATERIAL_ID_LIST
from (
    SELECT DISTINCT CHR(39) || ltrim(MATNR,0) || CHR(39) AS GLOBE_MATERIAL_ID_LIST
    FROM PR1_SOAINFRA.WLI_NESOA2_REPORTING_ARCHIVE,  
        XMLTABLE( '/_-GLB_-OGTX_DESADV01_CUST_ASN/IDOC/E1EDK08/E1EDP07/E1EDP09'  
              PASSING XMLTYPE(data_value,871)  
              COLUMNS  
              MATNR varchar2(2000) path 'MATNR'  
            ) 
    WHERE ERRORCODE IS NOT NULL AND BUSINESSID = '0000000382153210-E9APRR3103'
    order by GLOBE_MATERIAL_ID_LIST
) e order by GLOBE_MATERIAL_ID_LIST DESC

SQL Fiddle

Настройка схемы Oracle 11g R2 .

create table nums(
  id number(10)
);

insert into nums values ('12352682');
insert into nums values ('12351436');
insert into nums values ('12351434');
insert into nums values ('12350683');

Запрос :

select 
num || case when rownum > 1 then ',' else '' end as num
from (
select chr(39) || id  || chr(39) as num
from nums 
order by num
) e order by num desc

Результаты :

|         NUM |
|-------------|
| '12352682', |
| '12351436', |
| '12351434', |
| '12350683'  |
1
Saravana 2 Янв 2018 в 07:01

Легко добавить запятую к каждой строке, кроме первой ...

select distinct case when rownum > 1 then ',' end ||
       globe_material_id_list
from (
    SELECT DISTINCT CHR(39) || ltrim(MATNR,0) || CHR(39) AS GLOBE_MATERIAL_ID_LIST
    FROM PR1_SOAINFRA.WLI_NESOA2_REPORTING_ARCHIVE,  
        XMLTABLE( '/_-GLB_-OGTX_DESADV01_CUST_ASN/IDOC/E1EDK08/E1EDP07/E1EDP09'  
                  PASSING XMLTYPE(data_value,871)  
                  COLUMNS  
                  MATNR varchar2(2000) path 'MATNR'  
                ) 
    WHERE ERRORCODE IS NOT NULL AND BUSINESSID = '0000000382153210-E9APRR3103'
);

Это должен быть встроенный запрос из-за вашего distinct: вам необходимо сгенерировать набор globe_material_id_list перед его форматированием.

1
APC 2 Янв 2018 в 03:57