日期:2014-05-17 浏览次数:20935 次
--你的例子
[SYS@myoracle] SQL>WITH t1 AS(
  2   SELECT 1 ID, 1200 数量,DATE'2012-02-01' 开始日期,DATE'2012-02-10' 结束日期 FROM dual
  3   UNION ALL
  4   SELECT 2 ID, 900 数量,DATE'2012-02-06' 开始日期,DATE'2012-02-15' 结束日期 FROM dual
  5  )SELECT 开始日期+Lev-1,SUM(数量)
  6     FROM t1,(SELECT LEVEL Lev FROM dual CONNECT BY LEVEL <=31) t2
  7    WHERE 开始日期+Lev-1 <= 结束日期
  8      AND 开始日期+Lev-1 BETWEEN DATE'2012-02-01' AND DATE'2012-02-11'
  9    GROUP BY 开始日期+Lev-1
 10   ORDER BY 1;
开始日期+L  SUM(数量)
---------- ----------
2012-02-01       1200
2012-02-02       1200
2012-02-03       1200
2012-02-04       1200
2012-02-05       1200
2012-02-06       2100
2012-02-07       2100
2012-02-08       2100
2012-02-09       2100
2012-02-10       2100
2012-02-11        900
已选择11行。
--我自己多谢了几条数据
[SYS@myoracle] SQL>WITH t1 AS(
  2   SELECT 1 ID, 1200 数量,DATE'2012-02-01' 开始日期,DATE'2012-02-10' 结束日期 FROM dual
  3   UNION ALL
  4   SELECT 2 ID, 900 数量,DATE'2012-02-06' 开始日期,DATE'2012-02-15' 结束日期 FROM dual
  5   UNION ALL
  6   SELECT 3 ID, 300 数量,DATE'2012-02-03' 开始日期,DATE'2012-02-05' 结束日期 FROM dual
  7   UNION ALL
  8   SELECT 4 ID, 500 数量,DATE'2012-02-11' 开始日期,DATE'2012-02-25' 结束日期 FROM dual
  9  )SELECT 开始日期+Lev-1,SUM(数量)
 10     FROM t1,(SELECT LEVEL Lev FROM dual CONNECT BY LEVEL <=31) t2
 11    WHERE 开始日期+Lev-1 <= 结束日期
 12      AND 开始日期+Lev-1 BETWEEN DATE'2012-02-01' AND DATE'2012-02-15' --这个是你的条件
 13    GROUP BY 开始日期+Lev-1
 14   ORDER BY 1;
开始日期+L  SUM(数量)
---------- ----------
2012-02-01       1200
2012-02-02       1200
2012-02-03       1500
2012-02-04       1500
2012-02-05       1500
2012-02-06       2100
2012-02-07       2100
2012-02-08       2100
2012-02-09       2100
2012-02-10       2100
2012-02-11       1400
2012-02-12       1400
2012-02-13       1400
2012-02-14       1400
2012-02-15       1400
已选择15行。
[SYS@myoracle] SQL>