7

1つの列に特定の値のカウントを返すための正しいSQL構文に苦労しています。

このクエリは機能します(おそらく構文は正しくありませんが、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
  )

もちろん、「where」がどこにあるかにより、と列のLate両方が同じ値を返します。Absent

つまり、これは(右から)「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つの列。

私は最も基本的なselectクエリを実行できますが、ネストされたクエリ、ユニオン、結合、内部に関しては、自分の深みがありません。どんな助けでも大歓迎です。私の(機能している)クエリが何らかの形で正しく構造化されているとは決して言えません。

4

1 に答える 1

24
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
于 2013-02-04T00:13:06.793 に答える