Sql server 如何在SELECT语句中避免部分百分比的SELECT计数

Sql server 如何在SELECT语句中避免部分百分比的SELECT计数,sql-server,aggregate,Sql Server,Aggregate,我想在这里计算每个站点名称的部分百分比,但我会 需要计算我的行的合计计数 下面的查询可以工作,但是有没有一种方法不使用SELECT 在SELECT语句中,还是为此声明变量?我只有这么多的阅读权限 我不能声明变量 SELECT ServiceSiteName , COUNT(*) AS [Alarms Resolved] -- How can I avoid this. , (SELECT COUNT(1) FROM [C1

我想在这里计算每个站点名称的部分百分比,但我会 需要计算我的行的合计计数

下面的查询可以工作,但是有没有一种方法不使用SELECT 在SELECT语句中,还是为此声明变量?我只有这么多的阅读权限 我不能声明变量

SELECT

ServiceSiteName   
, COUNT(*)                                  AS [Alarms Resolved]
-- How can I avoid this.
, (SELECT COUNT(1) FROM [C1Datastore].[dbo].[Fct_AlertCRM_Incident] 
    WHERE Conditions A, B, C)       AS [Total Count]
    
, COUNT(*) / (SELECT COUNT(1) FROM [C1Datastore].[dbo].[Fct_AlertCRM_Incident] 
    WHERE Conditions A, B, C)       AS [% Count]

FROM TableX
WHERE Conditions A, B, C

GROUP BY 
ServiceSiteName

ORDER BY [Alarms Resolved]  DESC
关键是在(分区)上使用SUM(COUNT()),这要短得多

SELECT

ServiceSiteName   
, COUNT(*)                                  AS [Alarms Resolved]

    
-- Use this 
, SUM(COUNT(1)) OVER (PARTITION BY ServiceSiteName)     AS [TOTAL]
, COUNT(*) / SUM(COUNT(1)) OVER (PARTITION BY ServiceSiteName)         AS [% Count]


FROM TableX
WHERE Conditions A, B, C

GROUP BY 
ServiceSiteName

ORDER BY [Alarms Resolved]  DESC

为什么投反对票?