让我提供一下我所拥有数据的简化版本:
declare @cctbl table ([cc] [int]);
insert into @cctbl ([cc]) values (1),(2),(3);
declare @datetbl table ([dte] [date]);
insert into @datetbl ([dte]) values ('20180320'),('20180321'),('20180322');
declare @outtbl table ([cc] [int],[dte] [date]);
insert into @outtbl ([cc],[dte])
select [c].[cc],[d].[dte]
from @cctbl [c]
full outer join @datetbl [d] on ...?
我有这两个列表,上面例子中我需要的输出是:
[cc] [dte]
1 2018-03-20
1 2018-03-21
1 2018-03-22
2 2018-03-20
2 2018-03-21
2 2018-03-22
3 2018-03-20
3 2018-03-21
3 2018-03-22
如何从我的2个分隔列中到达那里?
答案 0 :(得分:2)
交叉加入是我想到的之后
答案 1 :(得分:1)
您可以使用CROSS or OUTER APPLY
。
使用您的示例数据,无论您使用哪种结果,结果都是相同的。
SELECT *
FROM @cctbl c
CROSS APPLY @datetbl d
ORDER BY c.cc
CROSS APPLY仅返回外表生成的行 表值函数的结果集。 OUTER APPLY返回两者 生成结果集的行和不具有NULL值的行 在表值函数生成的列中。