如何解决 select 查询中的单行子查询 returns 多行问题,以便以所需的方式获得结果?
How to fix single-row subquery returns more than one row issue in select query in order to achieve the result in a desired manner?
来源Table
成本类别
成本类别类型
2020 年第一季度
2020 年第二季度
2020 年第三季度
2020 年第四季度
受影响的员工
期间费用
10
20
0
4000
想要的结果
成本类别
成本类别类型
季度
价值
受影响的员工
期间成本
2020 年第一季度
10
受影响的员工
期间成本
2020 年第二季度
20
受影响的员工
期间费用
2020 年第三季度
0
受影响的员工
期间费用
2020 年第四季度
4000
我正在尝试使用以下查询
SELECT 'Q'|| LEVEL ||'-2020' AS id,
REGEXP_SUBSTR((select ATTRIBUTE_34 || ',' || ATTRIBUTE_35 || ',' ||
ATTRIBUTE_36 || ',' || ATTRIBUTE_37
from view_form_539766),
'[^,]+',
1,
LEVEL) AS data
FROM dual
CONNECT BY REGEXP_SUBSTR((select ATTRIBUTE_34 || ',' || ATTRIBUTE_35 || ',' ||
ATTRIBUTE_36 || ',' || ATTRIBUTE_37
from view_form_539766),
'[^,]+',
1,
LEVEL) IS NOT NULL
您可以将其写为联合查询:
Select CostCategory, CostCategoryType, 'Q1-2020' as QuarterYear, Q1-2020 as Value
from table1
union all
Select CostCategory, CostCategoryType, 'Q2-2020' as QuarterYear, Q2-2020 as Value
from table1
union all
.....
您可以使用 unpivot
,它是为此类任务开发的:
with a (
Cost_Category,
Cost_Category_Type,
Q1_2020,
Q2_2020,
Q3_2020,
Q4_2020
) as (
select
'Employee Impacted',
'Period Cost',
10,
20,
0,
4000
from dual
)
select *
from a
unpivot (
value
for Quarter_Year in (
q1_2020 as 'Q1-2020',
q2_2020 as 'Q2-2020',
q3_2020 as 'Q3-2020',
q4_2020 as 'Q4-2020'
)
)
COST_CATEGORY | COST_CATEGORY_TYPE | QUARTER_YEAR | VALUE
:---------------- | :----------------- | :----------- | ----:
Employee Impacted | Period Cost | Q1-2020 | 10
Employee Impacted | Period Cost | Q2-2020 | 20
Employee Impacted | Period Cost | Q3-2020 | 0
Employee Impacted | Period Cost | Q4-2020 | 4000
db<>fiddle here
来源Table
成本类别 | 成本类别类型 | 2020 年第一季度 | 2020 年第二季度 | 2020 年第三季度 | 2020 年第四季度 |
---|---|---|---|---|---|
受影响的员工 | 期间费用 | 10 | 20 | 0 | 4000 |
想要的结果
成本类别 | 成本类别类型 | 季度 | 价值 |
---|---|---|---|
受影响的员工 | 期间成本 | 2020 年第一季度 | 10 |
受影响的员工 | 期间成本 | 2020 年第二季度 | 20 |
受影响的员工 | 期间费用 | 2020 年第三季度 | 0 |
受影响的员工 | 期间费用 | 2020 年第四季度 | 4000 |
我正在尝试使用以下查询
SELECT 'Q'|| LEVEL ||'-2020' AS id,
REGEXP_SUBSTR((select ATTRIBUTE_34 || ',' || ATTRIBUTE_35 || ',' ||
ATTRIBUTE_36 || ',' || ATTRIBUTE_37
from view_form_539766),
'[^,]+',
1,
LEVEL) AS data
FROM dual
CONNECT BY REGEXP_SUBSTR((select ATTRIBUTE_34 || ',' || ATTRIBUTE_35 || ',' ||
ATTRIBUTE_36 || ',' || ATTRIBUTE_37
from view_form_539766),
'[^,]+',
1,
LEVEL) IS NOT NULL
您可以将其写为联合查询:
Select CostCategory, CostCategoryType, 'Q1-2020' as QuarterYear, Q1-2020 as Value
from table1
union all
Select CostCategory, CostCategoryType, 'Q2-2020' as QuarterYear, Q2-2020 as Value
from table1
union all
.....
您可以使用 unpivot
,它是为此类任务开发的:
with a ( Cost_Category, Cost_Category_Type, Q1_2020, Q2_2020, Q3_2020, Q4_2020 ) as ( select 'Employee Impacted', 'Period Cost', 10, 20, 0, 4000 from dual ) select * from a unpivot ( value for Quarter_Year in ( q1_2020 as 'Q1-2020', q2_2020 as 'Q2-2020', q3_2020 as 'Q3-2020', q4_2020 as 'Q4-2020' ) )
COST_CATEGORY | COST_CATEGORY_TYPE | QUARTER_YEAR | VALUE :---------------- | :----------------- | :----------- | ----: Employee Impacted | Period Cost | Q1-2020 | 10 Employee Impacted | Period Cost | Q2-2020 | 20 Employee Impacted | Period Cost | Q3-2020 | 0 Employee Impacted | Period Cost | Q4-2020 | 4000
db<>fiddle here