Нельзя использовать (под) запрос в предложении pivot in
.Вы можете ранжировать пользователей в соответствии с их суммарными значениями и использовать эти три значения (1, 2, 3) в in
.Затем либо используйте мой внутренний запрос, который представляет имена пользователей и суммы в отдельных столбцах, либо создайте окончательное объединение, где имена перечислены в первой строке, а суммы в строках ниже представлены в виде строк.
with t as (
select *
from (
select dense_rank() over (order by smu desc, users) rn,
schema_, table_, users, smt
from (
select schema_, table_, users, sum(tran_count) smt,
sum(sum(tran_count)) over (partition by users) smu
from main_table
group by schema_, table_, users))
pivot (max(users) name, max(smt) smt for rn in (1 u1, 2 u2, 3 u3)))
select null schema_, null table_, u1_name u1, u2_name u2, u3_name u3
from t where rownum = 1 union all
select schema_, table_, to_char(u1_smt), to_char(u2_smt), to_char(u3_smt)
from t
dbfiddle demo
Если вам действительно нужно поместить имена пользователей в заголовки, вам придется использовать метод динамического SQL или код написания внешнего кода.
Я не знаю, есть ли у вас такие столбцы, как table
или schema
, это зарезервированные слова, также как только вы пишете tran_count
и в заголовке count_date
, так что я несколько запутался.Но вы можете увидеть в связанном рабочем примере dbfiddle со столбцами schema_, table_, users, tran_count
.