Упорядочить по предложению во внутреннем запросе - PullRequest
0 голосов
/ 13 мая 2019

У меня есть сценарий. Мне нужно использовать listagg в 2 столбца, чтобы разделить запятую данных (,). У меня есть псевдонимы в запросе, поэтому я не могу использовать group by, что является обязательным в listagg. Чтобы решить эту проблему, я беру вывод во внешний запрос и использую там listagg и группирую столбец.

Проблема в том, что мои данные отсортированы по столбцу, который отсутствует в предложении select. Как я могу поддерживать порядок данных внутреннего запроса во внешнем запросе. Или

Есть ли возможность использовать столбец во внешнем запросе, чтобы использовать его для заказа, но не использовать в предложении select.

Мой запрос похож на

    select A+10 AA,
    B*20 BB,
    CC ,
    DD
    from Tab1 order by M;

когда я использую listagg, я изменил запрос

    select
    AA,
    BB
    listagg(CC,',') within group(order by CC),
    listagg(DD,',') within group(order by DD)
    from
    (
    select A+10 AA,
    B*20 BB,
    CC ,
    DD
    from Tab1 order by M
    )
     group by AA,BB

Если вы четко видите, наш внутренний запрос отсортирован по столбцу M, которого нет в предложении select. Как я могу сохранить order by M без использования внешнего запроса или, если я возьму столбец M во внешнем запросе, как я могу исключить результат.

Или есть возможность использования listagg во внутреннем запросе, когда у меня есть псевдонимы

1 Ответ

1 голос
/ 13 мая 2019

Вы можете использовать псевдонимы при группировке, а также столбцы, которые не отображаются для сортировки.Единственное ограничение заключается в том, что когда столбцы для сортировки не группируются, их необходимо агрегировать (sum, max, min и т. Д.).

with testtab as (
  select 1 "AA", 10 "BB", 'aval1' "CC", 'bval1' "DD", 5 "SORTV" from dual
  union all select 2, 10, 'aval2', 'bval2', 4 "SORTV" from dual
  union all select 2, 30, 'aval3', 'bval3', 3 "SORTV" from dual
  union all select 4, 40, 'aval4', 'bval4', 2 "SORTV" from dual
  union all select 4, 40, 'aval5', 'bval5', 1 "SORTV" from dual)
select aa + 10 as "AA",
  bb * 20 as "BB",
  listagg(cc, ', ') within group (order by cc),
  listagg(dd, ', ') within group (order by dd)
from testtab
group by aa, bb
order by max(SORTV) asc

дает

AA     BB   LISTAGG(CC,',')WITHINGROUP(ORDERBYCC)     LISTAGG(DD,',')WITHINGROUP(ORDERBYDD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
---------------------------------------------------------------------------------------
14     800  aval4, aval5                              bval4, bval5                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
12     600  aval3                                     bval3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
12     200  aval2                                     bval2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
11     200  aval1                                     bval1        
...