Sql Query:无法对来自不同表的数据进行分组

use*_*646 5 sql sql-server sql-server-2008-r2

我无法解决此查询.

表是:

tblStandard1students
tblStandard2students
tblStandard3students     
tblCandidateinfo
Run Code Online (Sandbox Code Playgroud)

tblStandard1students,tblStandard2students和tblStandard3students tbl包含有关参加标准1,2和3的学生的信息.

tblStandars1students

Candid  admitted
  1        Y
  2        N
  3        Y


tblCandidateinfo

Candid  gender Division
  1       M      1
  2       F      2
Run Code Online (Sandbox Code Playgroud)

等等...

现在我想要这样的表

Gender  Students(Standard1)  Students(Standard2)  Students(Standard3)
------------------------------------------------------------------------
 Male           10                 20                      30    
 Female         10                 30                      40
Run Code Online (Sandbox Code Playgroud)

我试过这个,但这不会给我错误:

SELECT case when Gender='M' then 'Male' 
            when Gender='F' then 'Female' 
       END AS Gender,

( SELECT count(*)
 FROM tblStandard1students A
 where A.Candid=B.Candid
 ) AS Students(Standard1),

( SELECT count(*)
 FROM tblStandard2students A
    where A.Candid=B.Candid
) AS Students(Standard2),

( SELECT count(*)
 FROM tblStandard3students A
    where A.Candid=B.Candid
) AS Students(Standard3)


FROM tblCandidateinfo B
group by Gender
Run Code Online (Sandbox Code Playgroud)

val*_*lex 1

SQLFiddle 演示

select 
case when Gender='M' then 'Male' 
            when Gender='F' then 'Female' 
      END AS Gender,
sum(T.std1) as [Students(Standard1)],
sum(T.std2) as [Students(Standard2)],
sum(T.std3) as [Students(Standard3)]
from
tblCandidateinfo as C

JOIN
(
select Candid, 1 as std1, 0 as std2, 0 as std3 
from tblStandars1students
union all
select Candid, 0 as std1, 1 as std2, 0 as std3 
from tblStandars2students
union all
select Candid, 0 as std1, 0 as std2, 1 as std3 
from tblStandars3students
) as T on (C.Candid=T.Candid)

GROUP BY GENDER
Run Code Online (Sandbox Code Playgroud)