Как постепенно возвращать количество строк на основе значений столбцов - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть таблицы отделов и вопросов. Для каждого отдела есть уровни одобрения. Поэтому, если, скажем, отдел кадров имеет 3 уровня одобрения, я хочу, чтобы раскрывающийся список возвращал новый столбец псевдонимов как Y1, Y2, Y3. Точно так же, если у финансов есть 2, они должны вернуть Y1 и Y2. Возможно ли это в sql?

На данный момент первый столбец псевдонимов возвращает, скажем, Y3 для HR, но я хочу, чтобы это было разбито на строки Y1, Y2, Y3. это возможно через sql?

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Создание последовательности от 1 до максимальных уровней утверждения в CTE.

WITH CTE as (
    SELECT LEVEL n
    FROM DUAL
    CONNECT BY LEVEL <= (select MAX(approval_level) from p_it_Departments )
)
SELECT      'Y'||c.n as approval
            ,d.approval_level
            ,d.dept_name
FROM        p_it_issues i 
INNER JOIN  p_it_Departments d  ON i.related_dept_id=d.dept_id
INNER JOIN  CTE c               ON c.n <= d.approval_level
ORDER BY dept_name

Вы также можете добавить DISTINCT к последнему SELECT, чтобы исключить дубликаты, которые присутствовали в исходном запросе, как хорошо.

0 голосов
/ 30 апреля 2020

Хорошо, это не было бы упомянуто в комментарии должным образом, но я понял это, поэтому хотел поделиться.

with cte as(
SELECT 
  ROW_NUMBER() OVER(partition by d.dept_name ORDER BY d.dept_name ASC ) AS Row#, 
  d.approval_level, d.dept_name
FROM  p_it_issues i, p_it_Departments d where i.related_dept_id=d.dept_id
) 
select 'Y'||cte.Row# from cte;

Это напечатало бы то, что я хотел показать.

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