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中不可用的特定函数?然后你可以加上它。请参阅我编辑的回复手册,以获得澄清。非常感谢您的快速回答。很好,谢谢你的快速回答