SQL Server计数具有相同值的记录数然后分组

时间:2015-04-07 06:04:13

标签: sql-server count group-by

我有一个名为 ReportStats 的表格   表列是:    ID MemberId 操作 RecordId 。   该操作可以具有创建,更改或停用的值   我想要做的是计算每个 MemberId 的每个操作的数量   这是可能的吗?

2 个答案:

答案 0 :(得分:4)

创建表格

CREATE TABLE #ReportStats (Id INT IDENTITY(1, 1), MemberId INT, [Action] VARCHAR(10))

插入一些示例数据

INSERT INTO #ReportStats VALUES (1, 'create'),
                                (1, 'create'),
                                (1, 'change'),
                                (1, 'deactivate'),
                                (1, 'change'),
                                (1, 'deactivate'),
                                (2, 'create'),
                                (2, 'change'),
                                (2, 'change'),
                                (2, 'change'),
                                (2, 'change'),
                                (2, 'deactivate')

简单的COUNT(*)GROUP BY可以解决问题:

<强>查询

SELECT
    MemberId,
    Action,
    COUNT(*) AS Cnt
FROM #ReportStats
GROUP BY MemberId, Action
ORDER BY MemberId

<强>输出

MemberId    Action      Cnt
1           change      2
1           create      2
1           deactivate  2
2           change      4
2           create      1
2           deactivate  1

答案 1 :(得分:1)

其他方法是使用count函数和OVER子句:

SELECT DISTINCT
    MemberId,
    Action,
    COUNT(*) OVER (PARTITION BY MemberID,Action) as CntAction
FROM #ReportStats