2013-11-04 33 views
0

我有一張表,列出了成員潛水結果的結果。我需要拿出一張表格,只顯示第一次通過潛水測試的人員,並將他們的資格列入決賽桌。SQL計數語法

我的邏輯是,我去除了那些在測試歷史記錄中失敗的人以及那些出現在列表中的人多一次。

這是我到目前爲止。我對SQL很陌生,所以如果看起來不對,我真的很抱歉。

感謝

SELECT b.branchmarina AS "Branch Suburb", m1.memsurname AS "Member Surname",  m1.memfirstname AS "Member First Name", m2.memsurname AS "Mentor Surname", m2.memfirstname  
AS "Mentor First Name", dt.dttestdate AS "Date", dt.DtQualLevel AS "Qualification" /*list of members who passed diving test on first attempt*/ 
FROM d_branch b, d_divetest dt, d_member m1, d_member m2 
WHERE UPPER (dt.dttestresult)='PASS' 
AND COUNT(DtMemberNo)<2 
AND m2.MemMentorMemberNo=m1.memberno 
AND m1.membranchno=b.branchno 
AND dt.testresult = (SELECT * 
FROM d_divetest dt1 
WHERE UPPER (dt1.dttestresult)='PASS' 
AND NOT EXISTS (UPPER (dt1.dttestresult)='FAIL')) 

這是我使用的表:

DtTestDate DtMemberNo DtQualLevel DtTestResult DtReasonFailed 
17-Apr-13 201   Beginner Pass  
18-Apr-13 202   Advanced Pass  
19-Apr-13 203   Expert  Pass  
20-Apr-13 204   Beginner Pass  
21-Apr-13 205   Beginner Fail Not able to stabilise 
26-Apr-13 205   Beginner Pass  
22-Apr-13 206   Beginner Fail Not able to stabilise 
27-Apr-13 206   Beginner Fail Not able to stabilise 
27-May-13 206   Beginner Pass  
27-Aug-13 206   Advanced Pass  
23-Apr-13 207   Expert  Pass  
24-Apr-13 208   Beginner Pass  
25-Apr-13 209   Advanced Pass  
01-Dec-13 211   Beginner            
02-Dec-13 212   Beginner   
03-Dec-13 213   Beginner   
04-Dec-13 214   Beginner   
05-Dec-13 215   Beginner   
27-Apr-13 226   Beginner Fail Weight belt not secured correctly 
29-Apr-13 227   Advanced Fail Unable to complete test 
30-Apr-13 228   Beginner Fail Not able to stabilise 

如果任何人有任何好的教程或建議,我將不勝感激。

+0

您應該在您的'FROM'語句中指定您的連接,而不是'WHERE'子句[link](http://technet.microsoft.com/en-us/library/aa213235(v = sql.80))。 aspx) –

+0

你如何使用d_divetest加入成員表? –

回答

0

更改爲滿足您的需要:

SELECT b.branchmarina AS "Branch Suburb", 
     m1.memsurname AS "Member Surname", 
     m1.memfirstname AS "Member First Name", 
     m2.memsurname AS "Mentor Surname", 
     m2.memfirstname AS "Mentor First Name", 
     dt.dttestdate AS "Date", 
     dt.DtQualLevel AS "Qualification" /*list of members who passed diving test on first attempt*/ 
FROM 
    d_branch b 
INNER JOIN 
    d_member m1 
ON 
    m1.membranchno = b.branchno 
INNER JOIN 
    d_member m2 
ON 
    m2.MemMentorMemberNo = m1.memberno 
INNER JOIN 
    d_divetest dt 
ON 
    m2.memberno = dt.dtMemberNo 
WHERE UPPER(dt.dttestresult) = 'PASS' 
    AND (select count(*) from d_divetest dd where dd.dtMemberNo = dt.MemberNo)=1 
0

我認爲你正在尋找的東西是這樣的:

SELECT b.branchmarina AS "Branch Suburb", 
    m1.memsurname AS "Member Surname", 
    m1.memfirstname AS "Member First Name", 
    m2.memsurname AS "Mentor Surname", 
    m2.memfirstname AS "Mentor First Name", 
    dt.dttestdate AS "Date", 
    dt.DtQualLevel AS "Qualification" 
FROM d_branch b 
INNER JOIN d_member m1 ON m1.membranchno = b.branchno 
INNER JOIN d_member m2 ON m1.MemMentorMemberNo = m2.memberno 
INNER JOIN d_divetest dt ON dt.MemberNo = m1.membranchno 
WHERE UPPER(dt.testresult) = 'PASS' 
HAVING COUNT(dt.MemberNo) < 2; 

這將確保你只有一個結果d_divetest,它是「 PASS'和其他JOINS將向您提供有關分支機構和成員的信息。

邊注:您不能在WHERE子句中使用COUNT(DtMemberNo)<2。你必須在HAVING子句中進行驗證。