我正在尝试获取按实体和状态分区的总记录数。我可以通过创建几个查询来做到这一点,但我想知道是否有比我的方法更简单的方法。
这是数据:
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
这个问题是创建所有这些查询变得混乱,而且我丢失了原始数据集中的所有详细数据。有没有更有效的方法来获得这些总数?
答案 0 :(得分:0)
您可以按实体和状态进行分组,然后使用COUNT()
获取每个状态的总数,然后将结果与总计数结合起来,如下所示:
SELECT StatusType, COUNT(*)
FROM Table
GROUP BY EntityID, StatusType
UNION
SELECT StatusType = 'Total', COUNT(*)
FROM Table