2012-02-02 14 views
1
SELECT a.ClassName, b.TeacherName, COUNT(c.Class_ID) 
from dbo.Class a 
inner join dbo.Teacher b on a.Teacher_ID = b.Teacher_ID 
left outer join dbo.ClassRegistration c on a.Class_ID = c.Class_ID 
group by a.ClassName, b.TeacherName 

私は現在、上記のSQLスクリプトを持っています。それは正常に動作し、アイデアはClassName、TeacherNameを表示し、このクラスがClassRegistrationテーブルに何回現れるかを数えます。次の部分は私がちょっと立ち往生した場所です。 ClassRegistrationテーブルには、「HasPaid」という列もあります。 "ClassRegistration's"がどれだけ支払われたかを示す2番目のCount列を追加する必要があります。基本的なSQL - 2番目のCount()カラムが必要

答えて

1

このお試しください:それはSQL-Server上でなら

SUM(CAST(HasPaid AS INT)) 
+0

完了!魅力的な作品! – SkonJeet

+1

更新された回答。 –

+1

Ahhh brilliant!私はすでにあなたの投稿からとても多くを学んだ。おかげさまで再びオレグ!! – SkonJeet

1

、およびHasPaid欄場合:HasPaidはタイプBITのであれば、あなたは、このような方法で、第二のカウントを簡素化することが

SELECT 
    a.ClassName, 
    b.TeacherName, 
    COUNT(c.Class_ID), 
    COUNT(CASE c.HasPaid WHEN 1 THEN c.Class_ID ELSE NULL END) 
from dbo.Class a 
inner join dbo.Teacher b 
    on a.Teacher_ID = b.Teacher_ID 
left outer join dbo.ClassRegistration c 
    on a.Class_ID = c.Class_ID 
group by a.ClassName, b.TeacherName 

をタイプビットですが、そのようなものを試すことができます

SELECT a.ClassName, b.TeacherName, COUNT(c.Class_ID), SUM(CASE HasPaid WHEN 1 THEN 1 ELSE 0 END) 
from dbo.Class a 
inner join dbo.Teacher b on a.Teacher_ID = b.Teacher_ID 
left outer join dbo.ClassRegistration c on a.Class_ID = c.Class_ID 
group by a.ClassName, b.TeacherName 
+0

ありがとうオレグと同じ原則、Max! – SkonJeet

関連する問題