2012-10-03 52 views
0

我有以下查询按ID分组并按病例名称获取姓名?

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记录ret urning像这样:

1 A 

我该怎么做?

回答

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
SELECT DISTINCT ID 
    , TestReason 
    FROM Test T 
WHERE TestResult = (SELECT MIN(TestResult) FROM Test WHERE ID = T.ID)