3

我有大约20张桌子,包括学生的考试记录。我试图弄清楚我的问题(学生 ID = sID,即分数 1:s1):StudentTables:(学生 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)

表D:(学生付款)

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            ...
...
..
4

2 回答 2

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
于 2014-03-14T06:59:36.827 回答
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)

于 2014-03-14T09:01:58.193 回答