このケースでは,
図6 リーダー列を追加したテーブル
ProjectLeaders
このテーブルからであれば,
リスト2 リーダーごとに配下の人数を集計するクエリ
SELECT leader,
SUM(CASE WHEN leader_flg <> '1' THEN 1 ELSE 0 END) AS all_cnt,
SUM(CASE WHEN leader_flg = '2' THEN 1 ELSE 0 END) AS sub_leader_cnt,
SUM(CASE WHEN leader_flg = '0' THEN 1 ELSE 0 END) AS member_cnt
FROM ProjectLeaders
GROUP BY leader;
あとは元のテーブルから,
リスト3 ProjectLeadersテーブルの作成
CREATE VIEW ProjectLeaders(project_id, leader, emp_id, leader_flg)
AS
SELECT project_id,
(SELECT emp_id
FROM ProjectEmps PE1
WHERE PE0.project_id = PE1.project_id
AND leader_flg = '1'), ←leader列を作るためのスカラサブクリエ
emp_id,
leader_flg
FROM ProjectEmps PE0;
いま,
反対にプロジェクトに2人以上のリーダーがいた場合は,
図7 リスカラサブクエリが複数行を返した場合のProjectLeadersテーブルのイメージ
ProjectLeaders
このように,
今回のように,