我对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
我需要做的是查找表中有多少行具有AideId
和EventName
的匹配值,并在新列中返回要向用户显示的数字。查询结果绑定到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
这根本没有意义吗?
感谢任何帮助。提前谢谢。
我的数据看起来像这样:
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具有的特定事件的消息数添加计数列。如果他们有多个,这意味着他们已经做出回应。否则他们没有。
对于任何感兴趣的人,这是我基于@ 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
答案 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