2016-10-31 2 views
0

아래 표가 있습니다. 모든 고유 ID를 계산하고 Role이 Teacher 인 카운트로 나누고 싶습니다.SQL 서버 수를 조건으로 나눕니다.

아래의 표와 같은

ID Userid Role 
1  A  Teacher 
2  b  Teacher 
3  c  Student 

뭔가. 수 (고유 ID)/수 (고유 ID) 역할 = 교사 인 경우

+0

물론 결과에 대한

임시 테이블, 당신은 지금까지 무엇을 한거야? 너 정확히 뭐야? –

+0

다른 역할 또는 모든 역할을 계산 하시겠습니까? –

+0

쿼리 및 조인에 의해 생성됩니다. TableA A.에서 별개의 A.id, a.userid, a.role을 선택하십시오. 어떤 접근 방식을 사용해야할지 모르므로 표시 할 작업이 없습니다. – Toby

답변

1

집계 된 CASE 표현식과 함께 간단한 COUNT DISTINCT를 사용할 수 있습니다. 결과가 소수를 반환하도록 float로 변환되었지만 시스템에 적용하기 전에 데이터 유형을 체크 아웃해야합니다. 샘플 데이터

CREATE TABLE #TestData (ID float, Userid nvarchar(1), Role nvarchar(7)) 
INSERT INTO #TestData 
VALUES 
(1,'A','Teacher') 
,(2,'B','Teacher') 
,(3,'C','Student') 

쿼리

SELECT 
COUNT(distinct td.ID) DistinctID 
,SUM(CASE WHEN td.Role = 'Teacher' THEN 1 ELSE 0 END) Teachers 
,CONVERT(float,COUNT(distinct td.ID))/CONVERT(float,SUM(CASE WHEN td.Role = 'Teacher' THEN 1 ELSE 0 END)) FinalField 
FROM #TestData td 

DistinctID Teachers FinalField 
3   2   1.5 
관련 문제