首页 > 解决方案 > SQL 首先将 COUNT 转换为 INT,然后对 COUNT 求和

问题描述

我的 SQL Server 数据库中有如下数据。

descr   code
11200   BM
11201   BM
11202   BM
11203   BM
11204   BM
11205   BM
11300   EN
11301   EN
11302   EN

我的查询如下

SELECT DISTINCT descr, code
    , CAST(COUNT(code) over (partition by code) as int) as codecount
FROM category 
WHERE descr IN('11200','11201','11300') AND code IN ('BM','BM','EN') 
GROUP BY descr, code 
ORDER BY descr asc, code asc

执行我的查询后,我的数据如下所示

descr   code    codecount
11200    BM         2
11201    BM         2                               
11300    EN         1               

我的问题是,我可以codecount在我castcount它之后求和吗?示例如下

descr   code    codecount    sum
11200    BM         2         3 
11201    BM         2         3           
11300    EN         1         3    

SUM 值是通过汇总 codecount 列来计算的,其中相同代码的 codecount 只会运行一次,根据我的问题,请注意我有 2 个值为 BM 的代码和 1 个值为 EN 的代码,所以总和应是 3,它是忽略具有相同代码的值。

我怎样才能做到这一点?

标签: sql-servertsql

解决方案


未测试,因为您没有提供 DDL / 示例数据插入

你不能嵌套窗口函数,所以你必须用 CTE 分隔它:

WITH CTE AS
(
    SELECT [desc], [code]
        , COUNT(*) over (partition by [code]) as codecount
    FROM category 
    WHERE [desc] IN ('11200','11201','11300') AND [code] IN ('BM','BM','EN') 
    GROUP BY [desc], [code] 
)
SELECT *
    , SUM(codecount) OVER() AS GrandTotal
FROM CTE
ORDER BY [desc] asc, [code] asc;

推荐阅读