0

私は次のクエリを持っています

SELECT ID, TestReason
FROM Test as t
INNER JOIN TestResult as tr ON t.ID = tr.TestID

テストには複数のテスト結果を含めることができます。

TestResultsありA, B, CますD, F。_

テストごとに最大のテスト結果を教えてください。ただし、テスト結果のIDは成績とは関係がないため、文字列を使用する必要があります。

表は次のとおりです。

テスト

ID    TestReason
int    int

テスト理由

ID    Grade
int   varchar(2)

つまり、基本的に最高の成績がすべてに勝るので、テスト(TestID = 1)に次のようなテスト結果が含まれている場合A,C,C,D,Dは、1つのレコードを返す必要があります。

1 A

どうすればいいですか?

4

2 に答える 2

3

多分私は何かが足りないのですが、あなたはこれを試しましたか?あなたはレターグレードを使用しているので、あなたは以下を使用しますMIN()

select MIN(r.grade), t.test_id
from test t
inner join testresult r
  on t.test_id = r.id
group by t.test_id

SQL FiddlewithDemoを参照してください

または、次を使用できますrow_number()

select grade, test_id
from
(
  select r.grade, t.test_id,
    row_number() over(partition by t.id 
                      order by grade) rn
  from test t
  inner join testresult r
    on t.test_id = r.id
) x
where rn = 1

SQL FiddlewithDemoを参照してください

于 2012-10-03T14:26:06.533 に答える
1
SELECT DISTINCT ID
     , TestReason
  FROM Test T
 WHERE TestResult = (SELECT MIN(TestResult) FROM Test WHERE ID = T.ID)
于 2012-10-03T14:28:25.713 に答える