Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何基于列值以增量方式返回行数_Sql_Oracle - Fatal编程技术网

Sql 如何基于列值以增量方式返回行数

Sql 如何基于列值以增量方式返回行数,sql,oracle,Sql,Oracle,我有部门和问题表。每个部门都有批准级别。 因此,如果说人力资源部有3个审批级别,我希望下拉列表返回一个新的别名列,即Y1、Y2、Y3。 类似地,如果财务部门有2,则应返回Y1和Y2。 在sql中可能吗 到目前为止,第一个别名列返回的是Y3 for HR,但我希望将其拆分为Y1、Y2、Y3行。可以通过sql实现吗?好的,这在评论中不会被正确地提到,但我想知道,所以想与大家分享 with cte as( SELECT ROW_NUMBER() OVER(partition by d.dept_

我有部门和问题表。每个部门都有批准级别。 因此,如果说人力资源部有3个审批级别,我希望下拉列表返回一个新的别名列,即Y1、Y2、Y3。 类似地,如果财务部门有2,则应返回Y1和Y2。 在sql中可能吗


到目前为止,第一个别名列返回的是Y3 for HR,但我希望将其拆分为Y1、Y2、Y3行。可以通过sql实现吗?

好的,这在评论中不会被正确地提到,但我想知道,所以想与大家分享

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;

这将打印我想要显示的内容。

在CTE中生成从1到最大批准级别的序列

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

您还可以在最后一次选择中添加一个独特的选项,以消除原始查询中存在的重复项。

每个部门都有批准级别。将这些存储在表格中,并将其用于下拉列表。根据问题中的示例,它将为财务生成Y1。你确定这就是你想要的吗?是的,我被困在那里了:金融业需要Y1,Y2。早些时候,它在财务部门工作,给Y1一个Y2,但人力资源部门增加了两倍。Y1,Y1,Y1,Y2,Y2,Y2,Y3,Y3,Y3,所以HR有9行,而不是3行