sql-server - 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
在我cast
和count
它之后求和吗?示例如下
descr code codecount sum
11200 BM 2 3
11201 BM 2 3
11300 EN 1 3
SUM 值是通过汇总 codecount 列来计算的,其中相同代码的 codecount 只会运行一次,根据我的问题,请注意我有 2 个值为 BM 的代码和 1 个值为 EN 的代码,所以总和应是 3,它是忽略具有相同代码的值。
我怎样才能做到这一点?
解决方案
未测试,因为您没有提供 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;
推荐阅读
- google-apps-script - googleappscript 中的错误
- node.js - 为什么我的 express-server 仅通过浏览器支持 https 而不是通过其他 nodejs 脚本?
- java - 无法使用intellij制作两个独立的jar文件
- javascript - HTML/JS/JSON- 获取用户输入并将其作为 JSON 对象添加到 JSON 有效负载
- c# - 如何在 C# 中停止和开始重新监听客户端套接字连接
- ios - 我的自定义相册收藏视图加载速度很慢
- android - 如何实现位置搜索?
- jquery - 这个 npm 包可以导入吗?
- android - 如何知道安卓设备的年龄?
- python - Matplotlib 填充权重的阶梯图