【发布时间】:2016-05-17 02:35:06
【问题描述】:
我对 SQL 相当陌生,并且在稍微复杂的 SQL 查询中的最后一步遇到了一些麻烦。我想计算表中有多少次,两个不同的值出现在超过 1 行中。
我的具体情况是,我的表也存储来自系统的消息/警报。这些警报会发送给需要响应的多个人。我想计算有多少收件人回复了每个警报。
我已将查询编辑到我卡住的部分,即:
SELECT DISTINCT AlertID, count(RecipientID) - count(Distinct RecipientID) as Replies,
FROM [myDB].[dbo].[Alerts]
此查询显示每个警报中有多少消息,不包括从系统发送给每个收件人的原始消息。这样做的问题是,如果有人对单个警报做出两次响应,则将其计为与 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 33333
12345 Msg2 mySystem 99999
我希望查询的输出是:
AlertID Replies
11111 2
33333 1
99999 0
我认为this answer 会有所帮助,但无法让它为我工作。如果可能,我还想将其保留在一个查询中,因为系统将处理大量数据。如果这不是最简单的方法,我愿意接受所有建议。
任何帮助将不胜感激。
【问题讨论】:
-
您可能应该提到“mySystem”发送的记录不应该计算在内。
标签: sql sql-server vb.net count