聚合SQL中两列中具有相同值的计数行
我对SQL非常陌生,正在为一个稍微高级一点的查询而挣扎。我的查询返回一个排序表,如下所示: 更新的查询: 我错误地发布了错误的查询。下面是正确的、类似的查询聚合SQL中两列中具有相同值的计数行,sql,sql-server,join,Sql,Sql Server,Join,我对SQL非常陌生,正在为一个稍微高级一点的查询而挣扎。我的查询返回一个排序表,如下所示: 更新的查询: 我错误地发布了错误的查询。下面是正确的、类似的查询 SELECT distinct T.AidId ,A.FirstName ,A.LastName ,T.EventName, FROM AidsDB.dbo.AidsInfo A JOIN AidsDB.dbo.TextsInfo T ON A.AidId = T.AidId 我需要做的是查找表中有多少行具有匹配值Aide
SELECT distinct T.AidId ,A.FirstName ,A.LastName ,T.EventName,
FROM AidsDB.dbo.AidsInfo A
JOIN AidsDB.dbo.TextsInfo T
ON A.AidId = T.AidId
我需要做的是查找表中有多少行具有匹配值AideId
和EventName
,并在新列中返回数字以显示给用户。查询结果被绑定到一个WebDataGrid
,我最终将处理大量数据
除此之外,我发现以下信息来源很有帮助,但似乎无法使其发挥作用。此问题涉及在单独查询中计算行数:
下面显示了如何添加列:
是否有任何方法可以将这些数据组合起来,以返回一个包含所需数据的表?可能是这样的:
SELECT (Count(*) Where EventName = EventName and AidId AidId) as Responses,
[TextTime],
[TextSender],
[TextContents],
[AidID],
[EventName]
FROM [TextsInfo] ORDER BY [TextTime] DESC
这有什么意义吗
感谢您的帮助。提前谢谢
更新#1:
我的数据如下所示:
Mesages表格:
员工信息表:
我在寻找的回应:
count列将根据每个Emloye拥有的特定事件的消息数量添加。如果他们有不止一个,这意味着他们已经做出了回应。否则他们就没有
更新#2
对于任何感兴趣的人,这是我基于@M02答案的工作查询:
select distinct T.AidId ,A.FirstName ,A.LastName ,T.EventName,
count(T.EventName + T.AidID) over(partition by T.EventName, T.AidID) cnt
from AidsDB.dbo.AidsInfo A join AidsDB.dbo.TextsInfo T on A.AidId = T.AidId
您可以通过查询联接来自group的结果,并获得如下结果:
SELECT t.A,t.B,C,D,E,F,t1.cnt FROM the_table t
JOIN (SELECT A,B,COUNT(*) cnt FROM the_table GROUP BY A,B) t1
ON t.A = t1.A
AND t.B = t1.B
下面是使用聚合函数执行此操作的另一种方法:
SELECT A,B,C,D,E,F,
count(a + b) over(partition by a,b) cnt
FROM the_table t
您可以在此处看到这两种方法的演示:
请添加您拥有的数据样本和您想要的输出。您的最终查询是有意义的。谢谢!!这很有效。我目前正在使用方法二。我的查询有一个连接方法(参见更新的帖子),在我的例子中,使用嵌套查询和聚合方法之间有性能差异吗?谢谢
AidID FirstName LastName
12345 John Doe
98765 Mike Smith
AidID FirstName LastName EventName Count
98765 Mike Smith Smith event1 1
12345 John Doe event1 2
select distinct T.AidId ,A.FirstName ,A.LastName ,T.EventName,
count(T.EventName + T.AidID) over(partition by T.EventName, T.AidID) cnt
from AidsDB.dbo.AidsInfo A join AidsDB.dbo.TextsInfo T on A.AidId = T.AidId
SELECT t.A,t.B,C,D,E,F,t1.cnt FROM the_table t
JOIN (SELECT A,B,COUNT(*) cnt FROM the_table GROUP BY A,B) t1
ON t.A = t1.A
AND t.B = t1.B
SELECT A,B,C,D,E,F,
count(a + b) over(partition by a,b) cnt
FROM the_table t