如何在SQL server中的case语句中执行SUM()
我想在case语句中添加一些计算,以动态创建新列的内容,但出现错误: 列“Test1.qrank”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中 这就是我正在研究的代码如何在SQL server中的case语句中执行SUM(),sql,sql-server,Sql,Sql Server,我想在case语句中添加一些计算,以动态创建新列的内容,但出现错误: 列“Test1.qrank”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中 这就是我正在研究的代码 case when test1.TotalType = 'Average' then Test2.avgscore when test1.TotalType = 'PercentOfTot' then (cnt/SUM(test1.qrank)) else cnt end as dis
case
when test1.TotalType = 'Average' then Test2.avgscore
when test1.TotalType = 'PercentOfTot' then (cnt/SUM(test1.qrank))
else cnt
end as displayscore
我确实试过分组,但没有成功
有什么提示吗?如果您使用的是SQL Server 2005或更高版本,您可以使用windowing函数
SUM()OVER()
但是,如果显示完整查询以获取实际需要的上下文,效果会更好。您可以使用一个通用表表达式首先创建和,将其连接到表中,然后根据需要使用WHEN to从CTE或原始表中获取值
WITH PercentageOfTotal (Id, Percentage)
AS
(
SELECT Id, (cnt / SUM(AreaId)) FROM dbo.MyTable GROUP BY Id
)
SELECT
CASE
WHEN o.TotalType = 'Average' THEN r.avgscore
WHEN o.TotalType = 'PercentOfTot' THEN pt.Percentage
ELSE o.cnt
END AS [displayscore]
FROM PercentageOfTotal pt
JOIN dbo.MyTable t ON pt.Id = t.Id
如果在GROUP BY语句中使用子句而不将其包含在select语句中,则可能会发生发布的错误 示例 这个有效
SELECT t.device,
SUM(case when transits.direction = 1 then 1 else 0 end) ,
SUM(case when transits.direction = 0 then 1 else 0 end) from t1 t
where t.device in ('A','B') group by t.device
这一个不是(从选择中省略了t设备)
这将产生您的错误,抱怨我正在为未包含在选择中的内容进行分组
SELECT
SUM(case when transits.direction = 1 then 1 else 0 end) ,
SUM(case when transits.direction = 0 then 1 else 0 end) from t1 t
where t.device in ('A','B') group by t.device
请提供所有查询以获得更多支持。您的查询的其余部分是什么。如果您通过…使用
over()
缺少组,则返回多个求和列,并且返回错误的结果。
SELECT
SUM(case when transits.direction = 1 then 1 else 0 end) ,
SUM(case when transits.direction = 0 then 1 else 0 end) from t1 t
where t.device in ('A','B') group by t.device