Группировка по предложению - только первая «групповая строка», заполненная значениями - PullRequest
0 голосов
/ 03 марта 2019

Ребята, мне нужна ваша помощь!

На самом деле у меня есть оператор выбора, который содержит группу по col1, col2, col3

enter image description here

Но мне нужно, чтобы значение отображалось только в первом ряду «группы».Следующие строки должны быть нулевыми или пустыми.Это должно выглядеть так:

enter image description here

Это возможно !?и если да, то как?: -)

Спасибо за вашу помощь !!Anja

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Вы можете использовать first_value функцию с between 3 following and unbounded following предложением окон:

with t(col1,col2,col3,col4) as
(
 select 'A', 'A1', .3, 'Pramisse 1' from dual union all  
 select 'A', 'A1', .3, 'Pramisse 2' from dual union all    
 select 'A', 'A1', .3, 'Pramisse 3' from dual union all 
 select 'A', 'A1', .3, 'Pramisse 4' from dual union all     
 select 'A', 'A2',  1, 'Pramisse 1' from dual union all    
 select 'A', 'A2',  1, 'Pramisse 2' from dual union all 
 select 'A', 'A2',  1, 'Pramisse 3' from dual union all 
 select 'A', 'A2',  1, 'Pramisse 4' from dual union all     
 select 'A', 'A3',  1, 'Pramisse 1' from dual union all    
 select 'A', 'A3',  1, 'Pramisse 2' from dual union all 
 select 'A', 'A3',  1, 'Pramisse 3' from dual union all 
 select 'A', 'A3',  1, 'Pramisse 4' from dual   
)    
select first_value(col1) over 
         ( partition by col2 order by col4 rows 
           between 3 following and unbounded following ) as col1, 
       first_value(col2) over 
         ( partition by col2 order by col2 rows 
           between 3 following and unbounded following ) as col2, 
       first_value(col3) over 
         ( partition by col2 order by col4 rows 
           between 3 following and unbounded following ) as col3, 
       col4
  from t;

COL1    COL2    COL3    COL4
----    ----    -----   ----------
A       A1      0,30    Pramisse 1
                        Pramisse 2
                        Pramisse 3
                        Pramisse 4
A       A2      1       Pramisse 1
                        Pramisse 2
                        Pramisse 3
                        Pramisse 4
A       A3      1       Pramisse 1
                        Pramisse 2
                        Pramisse 3
                        Pramisse 4

Демо

0 голосов
/ 03 марта 2019

Обычно его называют перерыв .В SQL * Plus есть, в Oracle Reports, и в Application Express ... так что, в зависимости от того, где вы собираетесь его использовать, есть вероятность, что вы сможете сделать это декларативно, выбрав, какие столбцы вы используете.собирается разбить отчет на.

Это пример SQL * Plus.

Во-первых, таблица Скотта EMP "как есть":

SQL> select deptno, job, ename, sal
  2  from emp
  3  order by deptno, job, ename;

    DEPTNO JOB       ENAME             SAL
---------- --------- ---------- ----------
        10 CLERK     MILLER           1300
        10 MANAGER   CLARK            2450
        10 PRESIDENT KING             5000
        20 ANALYST   FORD             3000
        20 ANALYST   SCOTT            3000
        20 CLERK     ADAMS            1100
        20 CLERK     SMITH             800
        20 MANAGER   JONES            2975
        30 CLERK     JAMES             950
        30 MANAGER   BLAKE            2850
        30 SALESMAN  ALLEN            1600
        30 SALESMAN  MARTIN           1250
        30 SALESMAN  TURNER           1500
        30 SALESMAN  WARD             1250

14 rows selected.

Если вы применяете разрывы, то это выглядит так:

SQL> break on deptno on job
SQL> select deptno, job, ename, sal
  2  from emp
  3  order by deptno, job, ename;

    DEPTNO JOB       ENAME             SAL
---------- --------- ---------- ----------
        10 CLERK     MILLER           1300
           MANAGER   CLARK            2450
           PRESIDENT KING             5000
        20 ANALYST   FORD             3000
                     SCOTT            3000
           CLERK     ADAMS            1100
                     SMITH             800
           MANAGER   JONES            2975
        30 CLERK     JAMES             950
           MANAGER   BLAKE            2850
           SALESMAN  ALLEN            1600
                     MARTIN           1250
                     TURNER           1500
                     WARD             1250

14 rows selected.

В значительной степени, как вы хотитеэто будет.

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