SQL Server - 使用where / on condition

时间:2018-03-29 13:32:53

标签: 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
  ...

我想做这样的事情:

select *
from t1
cross join t1 as t2
   on t1.Month = t2.Month

有办法做到这一点吗?

编辑:

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

1 个答案:

答案 0 :(得分:3)

是的,它被称为inner join

select *
from t1 inner join
     t1 t2
     on t1.Month = t2.Month

您可以使用wherecross join表达相同的内容,但我认为inner join优于:{/ p>

select *
from t1 cross join
     t1 t2
where t1.Month = t2.Month;

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