Oracle Повтор результатов запроса без вставки - PullRequest
0 голосов
/ 27 марта 2020

У меня есть следующая таблица, как показано ниже

enter image description here

И результат, который я ожидал ниже, зависит от разницы в датах (например, 2020/3 / 27 - 2020/3/20 = 7) и продлить результат. Можно ли без использования вставить на внутренний стол и расширить стол на оригинал. Из-за ограничения привилегий.

enter image description here

Ответы [ 2 ]

2 голосов
/ 27 марта 2020

Возможно ли без использования вставка во внутреннюю таблицу и расширение таблицы по оригиналу. Из-за ограничения привилегий.

Да, это возможно с помощью оператора Level в SQL. См. Ниже

SELECT
  SYSDATE - level
 ,'XXX' Name
 ,10  QTY
 ,level Date_diff
from
  dual
connect by
  level < 8
order by
  1;

РЕДАКТИРОВАТЬ: В соответствии с данными образца, запрос изменяется как

With       
      tab1 as  (  --Implementing Logic    
                  Select 
                        v_date - (level-1) v_date ,
                         name,
                         qty,
                        (data_diff+1) - level col
                  from tab            
                  connect by level <= data_diff                      
                )
   -- Selecting records
   select distinct * 
   from tab1 
   order by name,col desc ;

Демо:

With Tab(v_date,name,qty,data_diff)
        as ( -- Table Data
             select to_date('20-Mar-2020','DD-Mon-YYYY'),'A',10, 7 from dual
             UNION 
             select to_date('29-Mar-2020','DD-Mon-YYYY'),'B',12, 3 from dual
             UNION ALL
             select to_date('17-Mar-2020','DD-Mon-YYYY'),'C',30, 4 from dual
            ),    
      tab1 as  (      
                  Select 
                        v_date - (level-1) v_date ,
                         name,
                         qty,
                        (data_diff+1) - level col
                  from tab            
                  connect by level <= data_diff                      
                )

   select distinct * 
   from tab1 
   order by name,col desc ;

Результат:

enter image description here

0 голосов
/ 27 марта 2020

Вы можете использовать ниже

          WITH data
             AS (SELECT To_date('20-MAR-2020', 'DD-MON-YYYY') date1,
                        'xxx'                                 name,
                        10                                    qty,
                        7                                     date_diff
                 FROM   dual)
        SELECT date1 + LEVEL-1,
               name,
               qty,
               date_diff - LEVEL+1
        FROM   data
        CONNECT BY LEVEL < date_diff + 1
...