如何计算已加入SQL的事件

时间:2018-11-19 21:20:52

标签: sql sql-server

我要加入两个表:

DECLARE @Temp TABLE (
id INT)

INSERT INTO @Temp
VALUES (5)
,(2)
,(3)

DECLARE @Temp2 TABLE (
member_id INT)

INSERT INTO @Temp2
VALUES (5)
,(1)
,(3)

我如何计算可以左联接和不能左联接的行数。 在此示例中:@Temp中的5和3可以与@ Temp2连接,而@Temp中只有2不能连接。 我希望我的输出显示以下内容:

+--------+------------+
| Joined | Not_Joined |
+--------+------------+
|      2 |          1 |
+--------+------------+

3 个答案:

答案 0 :(得分:2)

您可以使用COUNT和SUM在单个查询中执行此操作。这应该产生您想要的结果。

DECLARE @Temp TABLE (
id INT)

INSERT INTO @Temp
VALUES (5)
,(2)
,(3)

DECLARE @Temp2 TABLE (
member_id INT)

INSERT INTO @Temp2
VALUES (5)
,(1)
,(3)

select Joined = count(t2.Member_id)
    , NotJoined = sum(case when t2.Member_id is null then 1 end)
from @Temp t
left join @Temp2 t2 on t2.member_id = t.id

答案 1 :(得分:0)

存在于@ Temp2中的@Temp中的计数:

SELECT COUNT(*) FROM @TEMP WHERE ID IN(SELECT MEMBER_ID FROM @TEMP2)

@ Temp2中的计数不在@Temp中:

SELECT COUNT(*) FROM @TEMP2 WHERE MEMBER_ID NOT IN(ID FROM @TEMP)

现在要创建一个结果集,有很多方法,但是这里有一个简单的方法:

SELECT 
    (SELECT COUNT(*) FROM @TEMP2 WHERE MEMBER_ID IN(ID FROM @TEMP)) AS [Joined],
    (SELECT COUNT(*) FROM @TEMP WHERE ID NOT IN(SELECT MEMBER_ID FROM @TEMP2)) AS [NotJoined]

@Sean Lange的答案更特定于JOIN问题,我的答案只是计算列表中存在的内容。

答案 2 :(得分:-1)

Select count(*) as 'NOT Joined ',
 (Select t1.count(*) from table1 
 t1)-count(*) as 'Joined' 
 from table1 where id NOT IN (Select member_id from table2);

  

基本上,左连接的工作方式是两个   表加上表2中不存在的表1的值。