在SQL中的两列中具有相同值的聚合计数行

时间:2016-05-06 23:41:38

标签: 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

我需要做的是查找表中有多少行具有AideIdEventName的匹配值,并在新列中返回要向用户显示的数字。查询结果绑定到WebDataGrid,我最终将处理大量数据。

除其他外,我发现以下来源有帮助,但似乎无法使其发挥作用。此问题解决了单独查询中的计数行:Count Rows with same values in two columns

SELECT  A,
        B,
        COUNT(*)
FROM the-table
GROUP BY A,B

以下说明如何添加列:Add Column in SQL Query

SELECT 'Site1' AS SiteName,
        t1.column1, 
        t1.column2
FROM the-table 

有没有办法将这些组合起来返回一个包含我想要的数据的表?这样的事情可能是:

SELECT (Count(*) Where EventName = EventName and AidId AidId) as Responses,
        [TextTime], 
        [TextSender], 
        [TextContents], 
        [AidID], 
        [EventName] 
FROM [TextsInfo] ORDER BY [TextTime] DESC

这根本没有意义吗?

感谢任何帮助。提前谢谢。

更新#1:

我的数据看起来像这样:

Mesages表:

AidID   TextContents    TextSender  TextTime                        EventName   
12345   Msg1             company1   2016-05-04 15:37:40.1522000     event1
12345   Reply to Msg1    John Doe   2016-05-04 15:38:29.0000000     event1
98765   Msg1             company1   2016-05-04 16:37:04.8458000     event1

员工信息表:

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

将根据每个emloyee具有的特定事件的消息数添加计数列。如果他们有多个,这意味着他们已经做出回应。否则他们没有。

更新#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

1 个答案:

答案 0 :(得分:3)

您可以按查询分组加入结果,并获得如下结果:

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

您可以在此处看到这两种方法的演示: http://rextester.com/KVDY97918