我对 SQL 还比较陌生,最近在一个稍微复杂的 SQL 查询的最后一步遇到了些麻烦。我想要计算表格中,有多少种不同的数值出现在超过1行数据中。
具体情况是,我的表格还存储了来自系统的消息/警报信息。这些警报会发送给多个需要做出响应的人员。我想要计算每个警报收件人的回复次数。
我已经将查询内容编辑下来,卡在的部分就是这个:
SELECT DISTINCT AlertID, count(RecipientID) - count(Distinct RecipientID) as Replies,
FROM [myDB].[dbo].[Alerts]
这个查询展示了每个警报中有多少条信息,不包括系统发送给每个收件人的原始信息。问题在于,如果某人对单个警报回复两次,则会被计算为两个响应,而不是我想要的1个。
我认为我可以通过计算每个DISTINCT AlertID以及DISTINCT recipients ID在超过1行中与AlertID一起出现的次数来实现这一点。如果有人回复两次,那么也没关系,因为只要有一个以上,就会被计算为单个响应。我在让它工作方面遇到了困难。
我的数据看起来像这样:
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 33333
12345 Msg2 mySystem 99999
我希望查询结果为:
以下是需要翻译的内容:
AlertID Replies
11111 2
33333 1
99999 0
我认为这个答案会有帮助,但我无法让其对我发挥作用。如果可能的话,我也希望将其保留在一个查询中,因为该系统将处理大量数据。如果这不是最简单的方法,我也愿意接受所有建议。
任何帮助都将不胜感激。