一个很好的选择查询,包括计数

问题描述:

我有大约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

我不喜欢加单独选择查询,因为表是相当大的:( –

你有没有试过这种

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和它返回数据有点晚:(任何想法? –

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)