sql - 如何在聚合函数 SUM() 中替换 SELECTS
问题描述
如何为 SUM-Function 中的 SELECT 语句创建解决方法
我目前正在将我的 Sybase 数据库迁移到 MsSQL。我的一个观点在其主要选择语句中有一些 SUM,然后在我的 SUM 函数中使用 subSelects
SELECT
SUM(CASE WHEN e.s = 'E'
AND EXISTS
( SELECT
1
FROM
system.E
JOIN system.EF
ON EF.EID = E.ID
WHERE
E.CID = C.ID
AND EF.T='smth')
AND A.AC= 'smthelse'
AND ET.EC not in( 'lol','lul','lel')
THEN
B.A
ELSE
0.0
END) AS smth
FROM ...
当 Select 语句至少有 1 个结果时,我希望它对 bA 求和
但相反,我收到此错误消息:
无法对包含聚合或子查询的表达式执行聚合函数。
我认为它不允许我在 SUM 函数中使用 subSelect,但我不确定如何修复它。
解决方案
JOIN
您可以使用运算符将子查询替换为横向OUTER APPLY
:
SELECT . . .
SUM(CASE WHEN e.s = 'E' AND
eef.ID IS NOT NULL AND
A.AC = 'smthelse' AND
ET.EC NOT IN ( 'lol', 'lul', 'lel')
THEN B.A ELSE 0.0
END) AS smth
FROM ... OUTER APPLY
(SELECT TOP (1) E.*
FROM system.E JOIN
system.EF
ON EF.EID = E.ID
WHERE E.CID = C.ID AND EF.T = 'smth'
) EEF
推荐阅读
- spring-batch - 在 Spring Cloud 数据流上重新启动批处理作业时,它从头开始
- redis - 在 REDIS 中获取设置的成员值
- python - Python exe脚本无法运行
- javascript - 为什么我不能使用 location.reload 作为回调?
- javascript - 使用带有类型定义的 const 创建组件时没有警告 - ReactJS+Typescript
- python - gRPC python发送图像+元数据
- php - 使用苗条框架时未执行 PHP 代码(已注释掉)
- windows-10 - pyinstaller 包获取 UnicodeDecodeError: 'utf-8' codec can't decode byte
- webrtc - 如何删除 Ant Media Server 中录制的自适应 mp4 文件?
- kubernetes - 缺少更改 Kubernetes 部署 yaml 以获取容忍文档