1

こんにちは、クエリを書く際に助けが必要です。

テーブルは次のとおりです。

tblStandard1students
tblStandard2students
tblStandard1students
tblDivision
tblCandidateinfo

tblStandard1students、tblStandard2students、tblStandard1studentstbl には、標準 1、2、および 3 に登録されている学生に関する情報が含まれています。

tblStandards1生徒

Candid  admitted
  1        Y
  2        N
  3        Y

tblDivision には 2 つの列しか含まれていません

 ID     Division
  1       A
  2       B
  3       C

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

しかし、これは私が性別ごとに分けているクエリの半分にすぎません...それを完了するのを手伝ってください。

4

2 に答える 2

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
于 2013-03-05T12:46:56.573 に答える
0

SELECT divison.Division ,IFNULL(stander1.M,0),IFNULL(stander1.F,0) FROM test. tblDivision除算 左結合 (SELECT 除算 ,count( ケース 性別 'M' の場合は 1 でなければ null 終了) as M,count( ケース 性別 'F' の場合 1 でなければ null 終了) as F FROM test. tblCandidateinfotc 内部結合 test.tblStandars1students ts1

ON tc.Candid=ts1.Candid

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

divison.id でグループ化します。

IFNULL の代わりに ISNULL を使用し、すべての標準テーブルで左結合を使用する

于 2013-03-06T06:08:40.607 に答える