SQL Server - 与 where / on 条件交叉联接

scr*_*Owl 6 sql sql-server join

我有一个包含员工每月数据的表格,我想进行交叉联接,但前提是确保他们在同一个月内。表看起来像这样:

  Month      Emp_id
1/1/2017      123
1/1/2017      234
1/1/2017      345
1/1/2017      456
2/1/2017      123
2/1/2017      234
2/1/2017      345
  ...
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

select *
from t1
cross join t1 as t2
   on t1.Month = t2.Month
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

编辑:

详细说明,如果我每个月和 12 个月有 100 名员工,我希望得到一个包含 120,000 行(每个月 100 * 100 笛卡尔,乘以 12(每个月 1 个))的输出表,而不是做一个完整的笛卡尔将是 1,440,000。

Gor*_*off 9

是的,它被称为inner join

select *
from t1 inner join
     t1 t2
     on t1.Month = t2.Month
Run Code Online (Sandbox Code Playgroud)

您可以使用whereand表达同样的事情cross join,但我认为 aninner join比:

select *
from t1 cross join
     t1 t2
where t1.Month = t2.Month;
Run Code Online (Sandbox Code Playgroud)

请注意,您正在使用select *,这意味着您将拥有重复的列名,并且不知道t1它们来自哪个。如果这是一个问题,请提出另一个问题。