2016-10-31 11 views
0

以下の表があります。すべての一意のIDを数え、役割が教師である数で除算したいと思います。SQL Serverのカウント数と条件の比較

表A

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

以下のような何か。 count(distinct id)/ count(distinct id)ロール=教師の場合

+0

確かに結果のため

一時テーブルは、あなたがこれまでに何をしましたか?どういうことですか? –

+0

異なるロールまたはすべてのロールを数えますか? –

+0

クエリと結合によって作成されます。 TableA Aから別のA.id、a.userid、a.roleを選択します。どのアプローチをとるべきかはわかりません。したがって、表示する作業はありません。 – Toby

答えて

1

単純なCOUNT DISTINCTを集約CASE式で使用できます。結果が小数点を返すように浮動小数点数に変換しましたが、システムに適用する前にデータ型をチェックアウトする必要があります。サンプルデータ

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