Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将聚合计数拆分为行_Sql_Oracle - Fatal编程技术网

Sql 将聚合计数拆分为行

Sql 将聚合计数拆分为行,sql,oracle,Sql,Oracle,我有这样的约会 CustId Frequency Date ------ --------- ----- C1 2 20-Jan-2015 C2 3 22-Feb-2015 我必须得到如下输出 C1 20-Jan-2015 C1 20-Jan-2015 C2 22-Feb-2015 C2 22-Feb-2015 C2 22-Feb-2015 有谁能帮我回答这个问题吗 提前感谢您需要一张数字表。有多种方法可以生成一个。下

我有这样的约会

CustId  Frequency  Date
------  ---------  -----
C1        2        20-Jan-2015
C2        3        22-Feb-2015
我必须得到如下输出

C1  20-Jan-2015
C1  20-Jan-2015
C2  22-Feb-2015
C2  22-Feb-2015
C2  22-Feb-2015
有谁能帮我回答这个问题吗


提前感谢

您需要一张数字表。有多种方法可以生成一个。下面是一个显式方法:

with numbers(n) as (
      select 1 from dual union all select 2 from dual union all select 3 from dual
     )
select d.CustId, d.date + n.n - 1 as date
from data d join
     numbers n
     on d.frequency <= n.n;
如果要生成一组数字,典型的方法是:

with numbers(n) as (
      select level as n
      from dual
      connect by level <= 365
     )

您可以拥有一个数字表并与之联接

select t1.CustId,t1.Date+t2.number as date 
from table t1 inner join numbers t2
on t2.number<=t1.frequency

您可以使用相关分层查询生成额外的行,而无需创建额外的表,并确保频率不超过这些数字的匹配范围:

SELECT CustID,
       "Date"
FROM   CustomerFrequencies c,
       TABLE(
         CAST(
           MULTISET(
             SELECT LEVEL
             FROM   DUAL
             CONNECT BY LEVEL <= c.Frequency
           )
           AS SYS.ODCINUMBERLIST
         )
       )

您好,Madhivanan,我正在Oracle中执行此查询,得到一个错误ORA-00904:DATEADD:invalid identifier。DATEADD是否有Oracle?Oracle中不可用的特定函数?然后你可以加上它。请参阅我编辑的回复手册,以获得澄清。非常感谢您的快速回答。很好,谢谢你的快速回答