按ID分组并按案例声明获取名称?

时间:2012-10-03 14:22:31

标签: sql sql-server sql-server-2008

我有以下查询

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

我该怎么做?

2 个答案:

答案 0 :(得分: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 with Demo

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

答案 1 :(得分:1)

SELECT DISTINCT ID
     , TestReason
  FROM Test T
 WHERE TestResult = (SELECT MIN(TestResult) FROM Test WHERE ID = T.ID)