Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL server中的case语句中执行SUM()_Sql_Sql Server - Fatal编程技术网

如何在SQL server中的case语句中执行SUM()

如何在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语句中添加一些计算,以动态创建新列的内容,但出现错误:

列“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 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