SQL-仅当表中存在3个事件时返回结果
希望在下面的问题上得到一些帮助 我需要的是,仅当一个表中的所有3个事件id都存在时才返回结果 在此表中,终端ID可以有多个与之关联的事件ID。 我只查找在指定日期范围内包含3个特定事件的终端ID: 下面的查询返回具有三个事件ID中任何一个的终端ID,我不确定如何告诉它以获得我需要的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
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