2013-11-21 151 views
0

我正在SQL Server中构建一个查询,计算我们为调查收到的分数。我们有一个名为overall_score的专栏,用户输入1-5的数字作为评分。我正在尝试创建一个存储过程,根据分数计算评分。SQL Server 2012查询计算计算

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; 

回答

2

原因你得到零是因为你做整数师。随着整数除法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) 

SELECT 100.0 * 
     SUM(CASE WHEN overall_score IN (4,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)  
+0

太棒了!这工作,非常感谢你。现在我唯一的问题是我无法获得正确的小数位数。我认为结果只会显示您在乘数中的小数位数。当我使用100.0或100.00时,我仍然得到相同的答案0.62044589450,我只希望它显示0.62 .... –

+0

@JaimieeBayliss更新了我的答案,显示2位小数。 –

+0

再次非常感谢你!这真的有帮助。 –