如何进行单行查询包括Oracle中的多行

时间:2016-08-13 01:24:39

标签: sql oracle

我想获取一组数据并通过添加基于现有字段的日期行来扩展它。例如,如果我有下表(ID NAME YEAR 1 John 2001 2 Jim 2012 3 Sally 2005 ):

John

我想获取这些数据并将其放入另一个表中,但将其扩展为包含一组月份(从那里我可以添加月度信息)。如果我只看第一条记录(ID NAME YEAR MONTH 1 John 2001 01-JAN-2001 1 John 2001 01-FEB-2001 1 John 2001 01-MAR-2001 ... 1 John 2001 01-DEC-2001 ),我的结果将是:

TABLE1

我有机制来推导我的每月日期,但如何从TABLE2中提取数据以制作ORA-01427 single-row subquery returns more than one row。这只是一个快速查询,但当然,我得到了select id, name, year, book_cd, (SELECT ADD_MONTHS('01-JAN-'|| year, LEVEL - 1) FROM DUAL CONNECT BY LEVEL <= 12) month from table1 ; 的预期。只是不确定如何组织查询将这两个部分组合在一起:

{{1}}

我意识到我无法做到这一点,但我不确定如何把这两件放在一起。我计划批量处理记录,因此它不会一次成为一个ID谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用交叉联接:

select t.id, 
       t.name, 
       t.year, 
       t.book_cd,
       ADD_MONTHS(to_date(t.year || '-01-01', 'YYYY-MM-DD'), m.rn) as mnth
  from table1 t
 cross join (select rownum - 1 as rn
               from dual
            connect by rownum <= 12) m