需要在SQL Server中记录总计数

时间:2017-12-05 17:03:26

标签: sql-server

我正在尝试获取按实体和状态分区的总记录数。我可以通过创建几个查询来做到这一点,但我想知道是否有比我的方法更简单的方法。

这是数据:

    EntityID   StatusDate   StatusType   Total
      10        2017-07-19      H1         3
      10        2017-08-18      H1         3
      10        2017-09-01      H1         3
      10        2017-04-01      H4         23
      10        2017-04-01      H4         23

在此示例中,StatusType = H1具有3个不同的记录,总共3个具有该状态。 StatusType = H4有23个不同的记录,总共23个(由于显而易见的原因,我没有包括所有23行)。我想将此列总计显示为26,这是3 H1状态和23 H4状态的总和。

这就是我提出的:

    Select a.*
    into #test
    from
    (select t.*, row_number()over(partition by entityid, statustypename, total order by statusdate) as rn
    from Table t) a
    where rn = 1

这产生了以下结果:

    EntityID    StatusDate   StatusType   Total   rn
      10         2017-07-19     H1          3      1
      10         2017-04-01     H5          23     1

然后我创建了这个:

    Select a.*,
    sum(total) over(partition by entityid order by statusdate)as newtotal
    from #test

哪个产生了:

    EntityID    StatusDate    StatusType   Total   NewTotal
      10         2017-04-01     H4          23        23
      10         2017-07-19     H1           3        26

这个问题是创建所有这些查询变得混乱,而且我丢失了原始数据集中的所有详细数据。有没有更有效的方法来获得这些总数?

1 个答案:

答案 0 :(得分:0)

您可以按实体和状态进行分组,然后使用COUNT()获取每个状态的总数,然后将结果与总计数结合起来,如下所示:

SELECT StatusType, COUNT(*) 
FROM Table
GROUP BY EntityID, StatusType

UNION

SELECT StatusType = 'Total', COUNT(*)
FROM Table