Sql 如何基于列值以增量方式返回行数
我有部门和问题表。每个部门都有批准级别。 因此,如果说人力资源部有3个审批级别,我希望下拉列表返回一个新的别名列,即Y1、Y2、Y3。 类似地,如果财务部门有2,则应返回Y1和Y2。 在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_
到目前为止,第一个别名列返回的是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行