1

3 つのテーブルを結合しており、これらの結合されたテーブルからいくつかのフィールドを返すクエリを作成したいと考えています。確認する必要がある条件があります。それは、1 人のユーザーのみに固有の行数です。
より正確かつ明確にするために、私のテーブルは次のようになります。

tblTest
------------------------------
TestID  | StudentID | TestType
------------------------------

tblTestType
---------------------------
TestType | TestName 
---------------------------

tblStudents
-------------------------------
StudentID | StudentName | Sex
-------------------------------

初めて試験に合格した学生のリストを取得しようとしています (したがって、「tblTest」の結果の行数は、ユーザーが試験を受けて合格したという事実を示すために 1 に等しい必要があります。これは、学生がその試験を複数回受けたことを意味します)、私のクエリは次のようになります。

SELECT       tblStudents.StudentName, COUNT(tblTest.StudentID) AS [Number of Times Exame is Taken], tblTest.TestID
FROM            tblTest INNER JOIN
                         tblTestType ON tblTest.TestID = tblTestType.TestType INNER JOIN
                        tblStudents ON tblTest.StudentID =tblStudents.StudentID
GROUP BY tblTest.StudentID, tblTest.TestID
HAVING        (tblTest.TestID = 1)

これは失敗します。誰かがこれを行う正しい方法を教えてもらえますか?

4

4 に答える 4

1

多分これはあなたが求めているものですか?

WITH cteTest AS (
  SELECT COUNT(TestID) TakenCount, StudentID, TestType
  FROM tblTest
  GROUP BY StudentID, TestType
)
SELECT
    s.StudentName,
    tt.TestName
  FROM cteTest t
  INNER JOIN tblTestType tt ON t.TestType = tt.TestType
  INNER JOIN tblStudents s ON t.StudentID = s.StudentID
  WHERE t.TakenCount = 1;
于 2012-09-14T11:28:58.420 に答える
1
SELECT       
tblStudents.StudentName, 
COUNT(tblTest.StudentID) AS [Number of Times Exame is Taken], 
MIN(tblTest.TestID) AS TestID
FROM            
tblTest 
INNER JOIN tblTestType ON tblTest.TestID = tblTestType.TestType 
INNER JOIN tblStudents ON tblTest.StudentID =tblStudents.StudentID
GROUP BY tblStudents.StudentName
HAVING COUNT(*) = 1
于 2012-09-14T11:07:03.373 に答える
1

これを試して:

select * from tblTestType T
join
    (SELECT    tblStudents.StudentID, 
               COUNT(*) AS [Number of Times Exame is Taken], 
               tblTest.TestID
    FROM      tblTest
    GROUP BY  tblTest.StudentID, tblTest.TestID
    HAVING COUNT(*)=1 )a
ON a.TestID = T.TestType
INNER JOIN tblStudents
ON a.StudentID =T.StudentID
于 2012-09-14T11:09:18.907 に答える
1
SELECT *
  FROM tblStudents
  WHERE StudentID IN (
    SELECT StudentID
      FROM tblTest
      GROUP BY StudentID, TestID
      HAVING COUNT(*) = 1
  )
于 2012-09-14T11:15:49.110 に答える