2013-11-21 2 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 

나는 내가 원하는 결과를 만들어 별도의 세 가지 선택 문을 가지고,하지만 난 그들을 함께 결합 갈 때 내가 잘못 여기서 뭐하는 거지 내 출력은 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 당신은 부동 소수점 연산에 변환 할 필요가 플러스 당신은 한 쿼리에서 모든 작업을 수행 할 수 있습니다 : 2 진수를 보여에만

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) 

당신

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을 사용합니다 :

,785,932 중 2 진수로 숫자 형식으로 캐스팅 할 수 있습니다 10
+0

굉장! 이 일이 정말 고마워요. 이제 내 유일한 문제는 올바른 소수 자리를 가져올 수 없다는 것입니다. 결과에 승수에 소수점 이하 자릿수를 표시하는 것으로 생각했습니다. 내가 100.0 또는 100.00을 사용할 때 나는 여전히 0.62044589450의 동일한 답을 얻었지만, 단지 0.62를 표시하고 싶다 .... –

+0

@JaimieeBayliss는 소수점 이하 두 자리를 보여주기 위해 나의 대답을 업데이트했다. –

+0

다시 한 번 감사드립니다! 이것은 정말로 도움이되었습니다. –