Столбец заказа внутри PIVOT на основе max (count_date) для каждого значения внутри условия - PullRequest
0 голосов
/ 10 июля 2019

У меня есть имя пользователя в столбце users, я хочу отобразить всех пользователей в виде столбца, и порядок представления столбца должен быть в порядке убывания их суммы данных.

запрос:

select * 
from (
  select sum(tran_count) over (partition by schema) as table_name 
  from main_table
) pivot (sum(tran_count) for users in ('abc','lmn','pqr'));

и:

schema   table   abc   lmn  pqr
pm       sector   32  216  12
history  trn     321   61   4
tap      issuer   43  325   2
count:           396 602 18

поэтому я хочу представить столбцы abc, lmn и pqr в порядке подсчета их данных:

обязательный ответ:

schema   table   lmn   abc  pqr
pm       sector   216   32  12
history  trn       61  321   4
tap      issuer   325   43   2

1 Ответ

0 голосов
/ 10 июля 2019

Нельзя использовать (под) запрос в предложении 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...