我有一张表,其中包含员工的月度数据,我希望这些数据可以交叉加入,但只有在确定它们是在同一个月之后。表看起来像这样:
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。
答案 0 :(得分:3)
是的,它被称为inner join
:
select *
from t1 inner join
t1 t2
on t1.Month = t2.Month
您可以使用where
和cross join
表达相同的内容,但我认为inner join
优于:{/ p>
select *
from t1 cross join
t1 t2
where t1.Month = t2.Month;
请注意,您使用的是select *
,这意味着您将拥有重复的列名称,而不知道它们来自哪个t1
。如果这是一个问题,请提出另一个问题。