您好,我在Oracle上,需要一些帮助。
我正在创建一个select语句,它生成一个和3列和end_date,table_name& kpi使用双表。我创建了前两列但是对于第三列我想用每个日期用4个不同的kpis填充它,我不知道如何做到这一点因为我只能用一个值填充它。
SELECT TRUNC (SYSDATE, 'iw') - LEVEL AS end_date, 'MyTable' AS table_name , 'kpi_1' as kpi
FROM DUAL CONNECT BY LEVEL <= 7
非常感谢您的帮助。
这是我想看的输出
答案 0 :(得分:1)
我猜你正在寻找这样的东西:
with dates (d) as
(SELECT TRUNC (SYSDATE, 'iw') - LEVEL
FROM DUAL CONNECT BY LEVEL <= 7
),
kpis (kpi) as
(select 'kpi_1' from dual union all
select 'kpi_2' from dual union all
select 'kpi_3' from dual union all
select 'kpi_4' from dual
)
SELECT d, 'MyTable' AS table_name , kpi
FROM dates
CROSS JOIN kpis
结果:
D TABLE_NAME KPI
09/03/2017 MyTable kpi_1
09/03/2017 MyTable kpi_2
09/03/2017 MyTable kpi_3
09/03/2017 MyTable kpi_4
09/02/2017 MyTable kpi_1
09/02/2017 MyTable kpi_2
09/02/2017 MyTable kpi_3
09/02/2017 MyTable kpi_4
09/01/2017 MyTable kpi_1
09/01/2017 MyTable kpi_2
09/01/2017 MyTable kpi_3
09/01/2017 MyTable kpi_4
08/31/2017 MyTable kpi_1
08/31/2017 MyTable kpi_2
08/31/2017 MyTable kpi_3
08/31/2017 MyTable kpi_4
08/30/2017 MyTable kpi_1
08/30/2017 MyTable kpi_2
08/30/2017 MyTable kpi_3
08/30/2017 MyTable kpi_4
08/29/2017 MyTable kpi_1
08/29/2017 MyTable kpi_2
08/29/2017 MyTable kpi_3
08/29/2017 MyTable kpi_4
08/28/2017 MyTable kpi_1
08/28/2017 MyTable kpi_2
08/28/2017 MyTable kpi_3
08/28/2017 MyTable kpi_4
答案 1 :(得分:0)
也许case expression可以提供帮助:
SELECT TRUNC (SYSDATE, 'iw') - LEVEL AS end_date,
'MyTable' AS table_name ,
CASE
WHEN level <= 2 THEN 'kpi_1'
WHEN level <= 4 THEN 'kpi_2'
WHEN level <= 6 THEN 'kpi_3'
ELSE 'kpi_4'
END as KPI
FROM DUAL CONNECT BY LEVEL <= 7
END_DATE TABLE_N KPI
---------------- ------- -----
2017/09/03 00:00 MyTable kpi_1
2017/09/02 00:00 MyTable kpi_1
2017/09/01 00:00 MyTable kpi_2
2017/08/31 00:00 MyTable kpi_2
2017/08/30 00:00 MyTable kpi_3
2017/08/29 00:00 MyTable kpi_3
2017/08/28 00:00 MyTable kpi_4