2014-03-14 35 views
3

我有大約20個表格,包括學生的考試記錄。我試圖找出我的問題 (學號= SID,即1分:S1): StudentsTables:(學生reg.data)一個很好的選擇查詢,包括計數

sID name surname regDate  photo   ........ 
891 Mike Jackson 01.01.2013 82342984.png .... 

表A:(學生的分數)

sID exam s1 s2 s3 s4 
891 6  0  0  0  20 > student 891 attended exam 6 
891 10  30 80 100 75 > student 891 attended exam 10 

(計數= 2)

表B:(學生文件,即:文獻1:D1)

sID d1  d2  d3  d4  d5  d6 
891 true false true true true true 

(計數= 1)

表C:(學生消息)

mID from to subject message 
1  10  891 any sub. any message... > student 891 received messages (look "to") 
1  10  891 mes2  other message... 
1  29  891 mes3  another message... 

(計數= 3)

提交:(學生付款)

sID pID amount date details 

(無學生記錄在這個表中,count = 0)

.....和類似的表如上。

我想要的結果如下圖所示:

sID name surname scoreCount docCount messageCount paymentCount ..... 
891 Mike Jackson 2   1   3    0   ... 
892 Susan Button 0   3   10    0   ... 
893 Ahmad Malisi 1   0   5    2   ... 
894 any any  4   1   0    0   ... 
... 
.. 
+0

我不喜歡加單獨選擇查詢,因爲表是相當大的:( –

回答

2

你有沒有試過這種

Select sid,name,surname, 
     (Select count(*) From student_scores Where Sid = S.Sid) as scoreCount , 
     (Select count(*) From student_documents Where Sid = S.Sid) as docCount , 
     (Select count(*) From student_messages Where to= S.Sid) as messageCount , 
     (Select count(*) From student_payments Where Sid = S.Sid) as paymentCount , 
     . 
     . 
     . 
From StudentsTables S 
Where Sid=891 
+0

它reall工作!但我有一些關於性能的擔憂,我有大約50K r ecords和它返回數據有點晚:(任何想法? –

0
Select sid,name,surname, 
isnull(sscnt,0) ,isnull(sdcnt ,0) ,isnull(spcnt ,0) ,isnull(smcnt,0) 

From StudentsTables S 
join (Select Sid,count(Sid) sscnt From student_scores group by Sid) ss 
on ss.sid=s.sid 
join (Select Sid,count(Sid) sdcnt From student_documents group by Sid) sd 
on sd.sid=s.sid 
join (Select Sid,count(Sid) spcnt From student_payments group by Sid) sp 
on sp.sid=s.sid 
join (Select Sid,count(Sid) smcnt From student_messages group by Sid) sm 
on sm.sid=s.sid 

這將查詢所有SID(S)