Sql 从表中具有多个where条件的多个表中进行查询

Sql 从表中具有多个where条件的多个表中进行查询,sql,sql-server,Sql,Sql Server,我试图统计所有活跃于该项目的演讲者,以及与某个项目相关的演讲者总数。第一个左连接适用于所有演讲者,但另一个仅适用于该项目的活跃演讲者,不适用,请提供任何帮助。小提琴在这里 但是当我尝试添加一部分,你会得到活跃的演讲者的数量 (LEFT JOIN (SELECT COUNT (tbl_SpeakerCard_Log.SpeakerName) WHERE tbl_Speaker_Log.Spoken = 0) ON tbl_AgendaList.AID = tbl_SpeakerCard_Lo

我试图统计所有活跃于该项目的演讲者,以及与某个项目相关的演讲者总数。第一个左连接适用于所有演讲者,但另一个仅适用于该项目的活跃演讲者,不适用,请提供任何帮助。小提琴在这里

但是当我尝试添加一部分,你会得到活跃的演讲者的数量

(LEFT JOIN (SELECT COUNT (tbl_SpeakerCard_Log.SpeakerName) 
WHERE tbl_Speaker_Log.Spoken = 0) 
ON tbl_AgendaList.AID = tbl_SpeakerCard_Log.AID)
在前一个左连接下,我得到一个错误。我100%肯定这个查询在某种程度上是错误的,但我不确定如何处理它

*注意:口语/主动语态是可互换的,我只是用不同的措辞来阐明我在寻找什么

编辑:这是所需的输出


您可以使用条件聚合来执行此操作:

SELECT    
    AgendaList.AID, 
    AgendaList.Item, 
    COUNT(SpeakerList.SPID) as SpeakerTotal, 
    SUM(CASE WHEN SpeakerList.Spoken = 0 THEN 1 ELSE 0 END) as ActiveSpeakers
FROM      AgendaList 
LEFT JOIN SpeakerLIST ON AgendaList.AID = SpeakerList.AID
GROUP BY  AgendaList.AID, AgendaList.Item;

或者您可以使用count而不是sum(这可能更清楚):


你能包括什么是desire输出吗?很抱歉,刚刚在一个表格中编辑了desire输出@JuanCarlosOropezaHow you get active 3 and 2,当你的示例数据中只有一个说话人的发言位=1时?如果Speaked为0,我希望它在活动列表中,我说了很多我不知道你可以在MSSQL中做的事情。。。或一般的星展银行。非常感谢,我现在终于可以在我的项目中取得更大的进步了:D
COUNT(CASE WHEN Spoken = 0 THEN Spoken END) as ActiveSpeakers
WITH sTotal AS (
SELECT    AgendaList.AID, AgendaList.Item, COUNT( SpeakerList.SPID) as SpeakerTotal
FROM      AgendaList 
LEFT JOIN SpeakerLIST ON AgendaList.AID = SpeakerList.AID
GROUP BY  AgendaList.AID, AgendaList.Item
),
sActive AS (
SELECT    AgendaList.AID, AgendaList.Item, COUNT( SpeakerList.SPID) as SpeakerActive
FROM      AgendaList 
LEFT JOIN SpeakerLIST ON AgendaList.AID = SpeakerList.AID
WHERE SpeakerLIST.Spoken = 0
GROUP BY  AgendaList.AID, AgendaList.Item
)
SELECT sTotal.*, sActive.SpeakerActive
FROM sTotal left join
     sActive on sTotal.AID = sActive.AID