T-Sql Join复制每一方

时间:2018-03-20 03:18:58

标签: sql sql-server tsql

让我提供一下我所拥有数据的简化版本:

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个分隔列中到达那里?

2 个答案:

答案 0 :(得分:2)

交叉加入是我想到的之后

答案 1 :(得分:1)

您可以使用CROSS or OUTER APPLY

使用您的示例数据,无论您使用哪种结果,结果都是相同的。

SELECT *
FROM @cctbl c
CROSS APPLY @datetbl d
ORDER BY c.cc

enter image description here

  

CROSS APPLY仅返回外表生成的行   表值函数的结果集。 OUTER APPLY返回两者   生成结果集的行和不具有NULL值的行   在表值函数生成的列中。

[DEMO]