0

我有以下查询

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

一个测试可以有多个测试结果。

TestResultsA, B, CD, 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 Fiddle

或者您可以使用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 Fiddle

于 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 回答