我对 SQL 相当陌生,在稍微复杂的 SQL 查询的最后一步中遇到了一些问题。我想计算表中两个不同值出现在超过 1 行中的次数。
我的具体场景是,我的表也存储来自系统的消息/警报。这些警报会发送给需要响应的多个人员。我想计算有多少收件人响应了每个警报。
我已将查询编辑到我所坚持的部分,即:
SELECT DISTINCT AlertID, count(RecipientID) - count(Distinct RecipientID) as Replies,
FROM [myDB].[dbo].[Alerts]
Run Code Online (Sandbox Code Playgroud)
此查询显示每个警报中有多少条消息,不包括系统发送给每个收件人的原始消息。问题在于,如果有人对单个警报响应两次,则会将其计为两次响应,而不是 1(这就是我想要的)。
我认为我可以通过计算每个 DISTINCT AlertID 以及 DISTINCT 收件人 ID 与 AlertID 一起出现在超过 1 行中的次数来做到这一点。如果有人回复两次也没关系,因为只要超过一次,就算作一次回复。我很难让它发挥作用。
我的数据如下所示:
RecipientID MsgContents SentBy AlertID
12345 Msg1 mySystem 11111
98765 Msg1 MySystem 11111
12345 1st Reply to Msg1 John Doe 11111
12345 2nd Reply to Msg1 John Doe 11111
98765 reply to Msg1 Mike Smith 11111
12345 Msg3 mySystem 33333
12345 Reply to Msg3 John Doe …Run Code Online (Sandbox Code Playgroud)