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)
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)