2013-02-04 10 views
6

1つの列の特定の値のカウントを返すために、正しいSQL構文で苦労しています。もちろんSQLクエリ - ネストされたSELECTクエリと異なる値を持つ同じ列の複数のCOUNT

このクエリは、(おそらく間違った構文が、SQL Server 2008のは幸せなようだ)作品

SELECT StudentID, count(UnApproved)as Late, count(Unapproved) as Absent from results 
WHERE unapproved=1 and StudentID in 
    (
    SELECT studentid FROM [Results] 
    WHERE StudentYearLevel='10' and Date > 20130101) group by StudentID 
) 

、両方LateAbsentの列があるため「どこ」であるところの同じ値を返します。

これは、(右から)「Year 10」のメンバーである学生のIDを決定することです。

返された生徒IDごとに、未承認の不在のタイプが1で、次の列に記録される未承認の不在の数を返す必要があります。また、タイプが2の未承認の不在の数も返します。

私はそうのようなクエリを提出しようとした場合

: -

SELECT StudentID, count(UnApproved)as Late where unapproved=2, count(Unapproved) as Absent from results 
where unapproved=1 and StudentID in 
    (
    SELECT studentid FROM [Results] where StudentYearLevel='10' and Date > 20130101 
) 
group by StudentID 

SQL Serverの亀裂それを、そして赤のほぼ全体のクエリを強調しています。

は、私はこれらの3つの列を終了する必要があります: -

StudentID | Late | Absent

し、適切なカウントの学生IDを持つ3つの列。

私は最も基本的な選択クエリを行うことができますが、ネストされたクエリ、ユニオン、ジョイン、インナーについては、私は自分の深みから外れています。どんな助けでも大歓迎です。決して私の(働いている)クエリがどんな形でも正確に構造化されていることは決してありません。 '私はこれをハックしています。

答えて

21
SELECT StudentID, 
SUM(case when Unapproved =1 then 1 else 0 end) as Late, 
SUM(case when Unapproved =2 then 1 else 0 end) as Absent 
from results where 
StudentID in (SELECT studentid FROM [Results] where StudentYearLevel='10' and Date > 20130101) 
group by StudentID 
関連する問題