从多个表中查询多个where表中的条件

时间:2015-08-14 21:26:40

标签: sql sql-server

我试图统计所有对该项目有效的发言者以及与某个项目相关的发言人总数。总扬声器的第一个LEFT JOIN可以工作,但另一个只有关于该项目的有源发言人没有,任何帮助都表示赞赏。 SQLFiddle就在这里

http://sqlfiddle.com/#!3/b579d/1

但是,当我尝试添加您将获得有效发言人数量的部分时

(LEFT JOIN (SELECT COUNT (tbl_SpeakerCard_Log.SpeakerName) 
WHERE tbl_Speaker_Log.Spoken = 0) 
ON tbl_AgendaList.AID = tbl_SpeakerCard_Log.AID)

在前一个LEFT JOIN下我收到一个错误。我100%确定查询在某种形式下是错误的,但我不确定如何处理它。

*注意:语音/主动是可以互换的,我只是用不同的措辞来澄清我正在寻找的东西。

编辑:这是所需的输出

http://imgur.com/yP1FKxg

2 个答案:

答案 0 :(得分:1)

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

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;

Sample SQL Fiddle

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

COUNT(CASE WHEN Spoken = 0 THEN Spoken END) as ActiveSpeakers

答案 1 :(得分:1)