我正在尝试创建一个从5个不同表中获取数据的查询。要返回每个日期和每个帐户的记录,我必须创建一个包含日期和帐户ID的“主”表。
由于我真的没有account_id的参考表,所以我一直在考虑编写查询。
select tab1.calendar_date, tab1.cal_d, (0) as account_id from calendar.table
union all
select tab1.calendar_date, tab1.cal_d, (1) as account_id from calendar.table
union all
select tab1.calendar_date, tab1.cal_d, (2) as account_id from calendar.table
依此类推帐户ID。
然后将生成的表映射到其他5个表以提取其他信息。还有另一种方法让我重构这个查询,这样它就不会进行4/5连接吗?一位同事提出了一个递归表,但我并不熟悉它。我几乎把它作为主要的“事实”表引用。
附加背景。我需要生成的表格如下所示:
calendar_date_id calendar_date account_id
2766 2014-01-01 1
2766 2014-01-01 2
2766 2014-01-01 3
... 2014-01-01 6
生成此表/结果后,我将与其他表及其他指标/维度一起加入。
答案 0 :(得分:1)
我建议使用像这样的递归cte做零到五件事:
with zerotofive as (
select 0 as a
union all
select a+1 as a from zerotofive
where a<5
)
select tab1.calendar_date, tab1.cal_d, zerotofive.a as account_id
from calendar.table
cross join
zerotofive
然后将其加入您可能拥有的任何其他表格
答案 1 :(得分:0)
USE Recursive Common Table Expression喜欢
;WITH CTEmaster AS(
select tab1.calendar_date, tab1.cal_d, 0 as account_id from calendar.table
union all
select tab1.calendar_date, tab1.cal_d, account_id+1 as account_id from CTEmaster
where account_id<5
)
select * from CTEmaster join (to your desired tables )