2012-10-03 108 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)