从dual中选择一列并使用不同的值填充它

时间:2017-09-08 11:54:44

标签: sql oracle oracle11g

您好,我在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

非常感谢您的帮助。

这是我想看的输出

enter image description here

2 个答案:

答案 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