SQL Server计数除以条件的计数

时间:2016-10-31 13:32:53

标签: sql-server-2008

我有下表。我想计算所有独特的ID,然后除以一个计数,其中角色是教师。

表A

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

如下所示。 count(distinct id)/ count(distinct id)当Role = Teacher

1 个答案:

答案 0 :(得分: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