递归SQL查询或只是多个联合?或者是其他东西?

时间:2014-02-25 16:28:15

标签: sql sql-server

我正在尝试创建一个从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

生成此表/结果后,我将与其他表及其他指标/维度一起加入。

2 个答案:

答案 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 )