Math 用于计算计算的SQL Server 2012查询

Math 用于计算计算的SQL Server 2012查询,math,sql-server-2012,Math,Sql Server 2012,我正在SQL Server中构建一个查询,用于计算我们收到的调查分数。我们有一个名为Totall_score的列,其中用户输入1-5之间的数字作为评分。我试图创建一个存储过程,根据分数计算评分 Score rating = (Total count of scores 4 and 5)/(Total number of responses) * 100 我有三个单独的select语句来创建我需要的结果,但是当我将它们组合在一起时,我的输出是0 有人能告诉我我做错了什么吗 单独的SQL语句: S

我正在SQL Server中构建一个查询,用于计算我们收到的调查分数。我们有一个名为Totall_score的列,其中用户输入1-5之间的数字作为评分。我试图创建一个存储过程,根据分数计算评分

Score rating = (Total count of scores 4 and 5)/(Total number of responses) * 100
我有三个单独的select语句来创建我需要的结果,但是当我将它们组合在一起时,我的输出是0

有人能告诉我我做错了什么吗

单独的SQL语句:

SELECT count(overall_score) FROM Layer1_DataMerge WHERE overall_score = 4;  
SELECT count(overall_score) FROM Layer1_DataMerge WHERE overall_score = 5;  
SELECT count(overall_score) FROM Layer1_DataMerge;  
结合起来:

SELECT distinct
(  
    (
        (SELECT count(overall_score) FROM Layer1_DataMerge WHERE Overall_Score = 4) +  
        (SELECT count(overall_score) FROM Layer1_DataMerge WHERE overall_score = 5)
    ) / (SELECT count(overall_score) FROM Layer1_DataMerge)
) AS CSAT  
FROM Layer1_DataMerge;
你得到零的原因是因为你在做整数除法。整数除法1/3=0。您需要将其转换为浮点算术,并且可以在一个查询中完成所有操作:

SELECT 100.0 * 
       (SUM(CASE WHEN overall_score = 4 THEN 1 ELSE 0 END) + 
       SUM(CASE WHEN overall_score = 5 THEN 1 ELSE 0 END)) / 
       COUNT(overall_score)

要仅显示2个小数,您可以将其转换为具有2个小数的数字类型:

SELECT CAST(
         100.0 * 
         SUM(CASE WHEN overall_score IN (4,5) THEN 1 ELSE 0 END) / 
         COUNT(overall_score)
       AS NUMERIC(5,2))
或使用STR转换为字符串:

SELECT STR(
         100.0 * 
         SUM(CASE WHEN overall_score IN (4,5) THEN 1 ELSE 0 END) / 
         COUNT(overall_score)
       ,5,2)      

令人惊叹的!这很有效,非常感谢。现在我唯一的问题是我不能得到正确的小数位数。我认为结果只会显示你在乘数中的小数位数。当我使用100.0或100.00时,我仍然得到相同的答案0.62044589450,我只希望它显示0.62。。。。
SELECT STR(
         100.0 * 
         SUM(CASE WHEN overall_score IN (4,5) THEN 1 ELSE 0 END) / 
         COUNT(overall_score)
       ,5,2)