SQL-仅当表中存在3个事件时返回结果

SQL-仅当表中存在3个事件时返回结果,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,希望在下面的问题上得到一些帮助 我需要的是,仅当一个表中的所有3个事件id都存在时才返回结果 在此表中,终端ID可以有多个与之关联的事件ID。 我只查找在指定日期范围内包含3个特定事件的终端ID: 下面的查询返回具有三个事件ID中任何一个的终端ID,我不确定如何告诉它以获得我需要的 SELECT EJTM.terminal_id FROM IG_LOG..EJ_Terminal_Master EJTM JOIN it_sysweb..EJ_Tran_Event_Master EJEM O

希望在下面的问题上得到一些帮助

我需要的是,仅当一个表中的所有3个事件id都存在时才返回结果

在此表中,终端ID可以有多个与之关联的事件ID。 我只查找在指定日期范围内包含3个特定事件的终端ID:

下面的查询返回具有三个事件ID中任何一个的终端ID,我不确定如何告诉它以获得我需要的

SELECT
 EJTM.terminal_id

FROM
 IG_LOG..EJ_Terminal_Master EJTM
 JOIN it_sysweb..EJ_Tran_Event_Master EJEM ON EJTM.event_type_id = EJEM.EJ_tran_event_id

WHERE
 EJEM.EJ_tran_event_id in 
(
 5011 --SignOn
,5119 --Reinit Printer
,5101 --NoSale 
 )                          
AND
 EJTM.event_date_time between '2017-06-06 03:00:00.000' and '2017-06-08 03:00:00.000'
AND
 EJEM.language_id = 'EN-US'

GROUP BY
 EJTM.terminal_id

虽然位健壮,但使用and子句将起作用

WHERE
      EJEM.EJ_tran_event_id = '5011' --SignOn
 AND  EJEM.EJ_tran_event_id = '5119' --Reinit Printer
 AND EJEM.EJ_tran_event_id = '5101' --NoSale                        
 AND
 EJTM.event_date_time between '2017-06-06 03:00:00.000' and '2017-06-08 03:00:00.000'
 AND
 EJEM.language_id = 'EN-US'

您可以使用
计数进行
分组,例如:

SELECT tm.terminal_id
FROM IG_LOG..EJ_Terminal_Master.tm JOIN it_sysweb..EJ_Tran_Event_Master em
ON tm.event_type_id = em.EJ_tran_event_id
WHERE em.EJ_tran_event_id IN (5011, 5119, 5101)
AND em.event_date_time between '2017-06-06 03:00:00.000' AND '2017-06-08 03:00:00.000'
AND em.language_id = 'EN-US'
GROUP BY tm.terminal_id
HAVING COUNT(DISTINCT em.EJ_tran_event_id) = 3; 

您正在使用什么RDBMS?MySQL还是SQL Server?移除不需要的标签。添加更多标记不会更快地回答您的问题。您可以按eventid分组,然后添加having count(terminal_id)=3 having count(DISTINCT EJEM.EJ_tran_event_id)=3感谢您的全部输入!拥有COUNT(DISTINCT EJEM.EJ_tran_event_id)=3就是答案!非常感谢达珊。这正是我需要的!谢谢你的房子!最后使用:HAVING COUNT(DISTINCT EJEM.EJ_tran_event_id)=3