2013-03-05 2 views
1

안녕하세요 저는 쿼리 작성에 도움이 필요합니다.Sql 다른 테이블에서 합계를 찾으려면 쿼리

테이블은 다음과 같습니다

tblStandard1students 
tblStandard2students 
tblStandard1students 
tblDivision 
tblCandidateinfo 

tblStandard1students, tblStandard2students는, tblStandard1studentstbl이

Candid admitted 
    1  Y 
    2  N 
    3  Y 

tblDivision 표준 1, 2, 3

tblStandars1students에 등록한 학생에 대한 정보를 포함 만 2 열

을 포함 ,553,210

tblCandidateinfo

Candid gender Division 
    1  M  1 
    2  F  2 

및 ...

지금 나는이

Division Students(Standard1) Students(Standard2) Students(Standard3) 
      M   F   M   F  M   F 
------------------------------------------------------------------------ 
A   1   0   0   0   0   1 
B   2   2   3   3   4   4 
C   1   0   0   0   0   0 

같은 테이블이 나는이 다음과 같은 쿼리를 시도하려는 :

SELECT Division, 

    (SELECT count(*) 
    FROM tblStandard1students A 
    INNER JOIN tblCandidateinfo B ON A.Candid=B.Candid 
    INNER JOIN tblDivision C ON C.ID=B.Division) AS Students(Standard1), 

    (SELECT count(*) 
    FROM tblStandard2students A 
    INNER JOIN tblCandidateinfo B ON A.Candid=B.Candid 
    INNER JOIN tblDivision C ON C.ID=B.Division) AS Students(Standard2), 

    (SELECT count(*) 
    FROM tblStandard3students A 
    INNER JOIN tblCandidateinfo B ON A.Candid=B.Candid 
    INNER JOIN tblDivision C ON C.ID=B.Division) AS Students(Standard3) 
FROM tblDivision Z 

을하지만, 이 질문은 절반 밖에 안됩니다. egregate gender wise ... 그것을 완성하도록 도와주세요.

답변

2
;WITH combined AS 
(
    SELECT ci.Division, 'Students(Standard1) ' + ci.gender AS grp 
    FROM tblCandidateInfo ci 
    INNER JOIN tblStandard1students s ON ci.Candid = s.Candid 
    UNION ALL 
    SELECT ci.Division, 'Students(Standard2) ' + ci.gender AS grp 
    FROM tblCandidateInfo ci 
    INNER JOIN tblStandard2students s ON ci.Candid = s.Candid 
    UNION ALL 
    SELECT ci.Division, 'Students(Standard3) ' + ci.gender AS grp 
    FROM tblCandidateInfo ci 
    INNER JOIN tblStandard1studentstbl s ON ci.Candid = s.Candid 
) 
SELECT Division, 
    [Students(Standard1) M], [Students(Standard1) F], 
    [Students(Standard2) M], [Students(Standard2) F], 
    [Students(Standard3) M], [Students(Standard3) F] 
FROM 
(
    SELECT d.Division, grp 
    FROM tblDivision d 
    LEFT OUTER JOIN combined c ON d.ID = c.Division 
) x 
PIVOT 
(
    COUNT(grp) 
    FOR grp IN ([Students(Standard1) M], [Students(Standard1) F], 
     [Students(Standard2) M], [Students(Standard2) F], 
     [Students(Standard3) M], [Students(Standard3) F]) 
) y 
ORDER BY Division 
0

SELECT divison.Division, IFNULL (stander1.M, 0), IFNULL (stander1.F 0) test FROM. tblDivision divison 왼쪽 합 (M은 1, 그 다음엔 null 끝)은 M, count (대문자, 'F', 그 외에는 1 Null end) F FROM test. tblCandidateinfo tc inner 조인 왼쪽 걸릴

Insted IFNULL 사용 ISNULL 및 ; 가입 test.tblStandars1students는 divison.id 의해 tc.Candid = ts1.Candid

group by division) as stander1 on stander1.division= divison.id 

그룹을

을 TS1 모든 스탠드 테이블

관련 문제