как сделать так, чтобы значение по группам столбцов отображалось только в первой строке - PullRequest
0 голосов
/ 21 ноября 2018

В oracle запрос перезапускает этот набор данных

DEPT | EMP_NAME | SALARY
-----+----------+-------
10   | MARY     | 30000
10   | JOHN     | 20000
10   | SCOTT    | 20000
20   | BOB      | 50000
20   | BETTY    | 50000

Моя цель - сделать так, как показано ниже:

DEPT | EMP_NAME | SALARY
-----+----------+-------
10   | MARY     | 30000
     | JOHN     | 20000
     | SCOTT    | 20000
20   | BOB      | 50000
     | BETTY    | 50000

имя депо должно появляться сразу, до запуска новой деп.

1 Ответ

0 голосов
/ 21 ноября 2018

Предполагая, что ваши результаты упорядочены по отделу, имени сотрудника, вы можете использовать функцию LAG, чтобы найти первую строку для каждого отдела.Вам нужно было бы проверить каждую строку, чтобы увидеть, имеет ли она другой отдел, чем предыдущая строка, что-то вроде этого:

SELECT CASE /* Check if there's a different department number on this row compared to the previous row */
         WHEN NVL(LAG(t.dept) OVER (ORDER BY t.dept, t.emp_name),-1) <> t.dept /* If previous row is null (ie, this is the first row), use -1 as previous dept number so comparison does not fail */
         THEN t.dept
       END AS display_dept,
       t.emp_name,
       t.salary
FROM myTable t
ORDER BY t.dept, t.emp_name

Тем не менее, как уже отмечали другие, это действительно не то, что SQLпредназначен сделать;было бы намного лучше, если бы эта логика была в том, что отображает результаты запроса, чем в самом запросе.

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