Сводная таблица с столбцами Dynami c DATE - PullRequest
0 голосов
/ 19 июня 2020

У меня есть запрос, который я создал из таблицы.

пример:

select
        pkey,
        trunc (createdformat) business_date,
        regexp_substr (statistics, 'business_ \ w *') business_statistics
    from business_data
    where statistics like '% business_%'
    group by regexp_substr(statistics, 'business_\w*'), trunc(createdformat)

Это отлично работает благодаря вашей помощи. Теперь я хочу показать это в кросс-таблице / сводной таблице.

Это означает, что в первом столбце находится «business_statistics», а заголовки столбцов - «Dynami c days from business_date». Я пробовал следующее, но это еще не совсем работает

    SELECT * 
      FROM (
        select
          pkey,
          trunc(createdformat) business_date,
          regexp_substr(statistics, 'business_\w*') business_statistics
         from business_data
         where statistics like '%business_%'
            )
       PIVOT(
         count(pkey)
         FOR business_date
         IN ('17.06.2020','18.06.2020')
        )
     ORDER BY business_statistics

Если я укажу дату, например, здесь 17.06.2020 и 18.06.2020, это сработает. 3 столбца (Business_Statisti c, 17.06.2020, 18.06.2020). Но из столбца 2 это должно быть Dynami c. Это означает, что он должен показать мне дни (дату), которые также включены в запрос / таблицу. Итак, это результат X столбцов (Business_Statistics, Date1, Date2, Date3, Date4, ....). Dynami c на основе данных таблицы.

Например, это не работает:

... IN (SELECT DISTINCT trun c (createdformat) FROM BUSINESS_DATA WHERE статистика вроде ' % business_% 'заказ по trun c (createdformat)) ...

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

К сожалению, я не очень хорошо знаком с PL / SQL. Но могу ли я по-прежнему обрабатывать дату начала и дату окончания пользователя для запроса?

Например, пользователь входит в среду APEX как StartDate: 17 июня 2020 г. и как EndDate: 20 июня 2020 г.

Затем дневная разница вычисляется в запросе PL / SQL, затем переменная заполняется значением введенного периода с использованием L oop.

Пример: (Просто идея, я еще не настолько вписываюсь в PL / SQL)

DECLARE
startdate := :P9999_StartDate 'Example 17.06.2020
enddate := P9999_EndDate 'Example 20.06.2020
BEGIN
   LOOP 'From the startdate to the enddate day
     businessdate := businessdate .... 'Example: 17.06.2020,18.06.2020,19.06.2020, ...
   END LOOP

    SELECT * 
      FROM (
        select
          pkey,
          trunc(createdformat) business_date,
          regexp_substr(statistics, 'business_\w*') business_statistics
         from business_data
         where statistics like '%business_%'
            )
       PIVOT(
         count(pkey)
         FOR business_date
         IN (businessdate)
        )
     ORDER BY business_statistics
END;

Это была бы моя идея, но я не могу ее реализовать. Это возможно? Надеюсь, вы понимаете, о чем я

0 голосов
/ 19 июня 2020

Предложение pivot не работает со значениями c Dynami.

Но здесь обсуждаются некоторые обходные пути: Как преобразовать строки в столбцы и обратно с помощью SQL (также известного как PIVOT и UNPIVOT) Вы можете найти один обходной путь, который соответствует вашим требованиям.

...