2013-11-21 4 views
0

Я создаю запрос в SQL Server, который вычисляет оценки, которые мы получаем для наших опросов. У нас есть столбец с именем total_score, где пользователь вводит число от 1 до 5 в качестве рейтинга. Я пытаюсь создать хранимую процедуру, которая будет вычислять оценки, основанные на оценках.Запрос SQL Server 2012 для вычисления вычислений

Score rating = (Total count of scores 4 and 5)/(Total number of responses) * 100 

У меня есть три отдельных операторов выбора, которые создают результаты, которые необходимы, но когда я иду, чтобы объединить их вместе мой выход 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

Снова спасибо вам большое! Это действительно помогло. –

Смежные вопросы