2017-01-04 10 views
1

まず、ご質問は私の問題を説明していないと私は質問としてそれを伝える方法を知らない。SQL外部結合ビュー

各支店でポジション監督の女性と男性の数をカウントしたいと思います。

だから、これはSQLです:

CREATE VIEW Women (BranchID,AnzahlF,position) AS 
SELECT  Branch.BranchID, COUNT(*) As AnzahlF,Staff.position 
FROM   Staff full outer JOIN 
         Branch ON Branch.BranchID = Staff.BranchFK 
WHERE gender LIKE 'F' AND position LIKE 'Supervisor' 
GROUP BY Branch.BranchID,Staff.position 

CREATE VIEW Men (BranchID,AnzahlM,position) AS 
SELECT  Branch.BranchID,COUNT(*) As AnzahlM ,Staff.position 
FROM   Staff Full outer JOIN 
         Branch ON Branch.BranchID = Staff.BranchFK 
WHERE gender LIKE 'M' AND position LIKE 'Supervisor' 
GROUP BY Branch.BranchID,Staff.position 


    Select ISNULL(Women.BranchID, Men.BranchID) AS BranchID, 
    Case When (Women.AnzahlF is Null) THEN 0 
ELSE Women.AnzahlF END As ANzahlFSuperv, 
    Case When (Men.AnzahlM is Null) THEN 0 
ELSE Men.AnzahlM END As ANzahlMSuperv 
    from Women Full outer join Men On Women.BranchID = Men.BranchID 
    Group by Women.BranchID, Men.BranchID,Women.ANzahlF,Men.AnzahlM Order by BranchID 

は、これが出力されます: BranchID、ANzahlFSuperv、ANzahlMSuperv
B001,2,0
B003,1,1
B004,1,1
B005,1,0
B006,1,0
B007,0,2
B008,1,1
B0 09,0,1
B010,0,1
B011,1,0
B012,0,1
B013,1,0
B014,1,0
=>欠落B002、0,0

しかし、ID「B002」の支店にはANzahlFSuperv = 0とANzahlMSuperv = 0が設定されていません。したがって、それには超代理店はありません。だからこの結果を得る方法は?

このBranchIDを取得するには、解決策がビューに含まれている必要があります。

私は無駄なことをすべて試みました。

あなたは私を援助してくれることを願っています!

ありがとうございます!

+0

。効果的に 'OUTER JOIN'を' INNER JOIN'にしています。なぜなら、 'OUTER JOIN'の結果が返された後*を実行するからです。 – Siyual

+0

ありがとうねえ、これは内側の結合する必要があります。 – IsoFunCode

+0

私はこれを試しました:SELECT Branch.BranchID、COUNT(*)AnzahlM、Staff.positionとして スタッフから内部JOIN 支店ON支店ブランチID = Staff.BranchFK AND性別LIKE 'F' AND LIKE 'Supervisor' GROUP BY Branch.BranchID、Staff.position しかし、動作しません!同じ結果! – IsoFunCode

答えて

1

なぜこのビューを使用しますか?ただ、left joingroup by

SELECT b.BranchID, COUNT(*) As AnzahlM, 
     SUM(CASE WHEN s.gender = 'F' THEN 1 ELSE 0 END) as females, 
     SUM(CASE WHEN s.gender = 'M' THEN 1 ELSE 0 END) as males 
FROM Branch b LEFT JOIN 
    Staff s 
    ON b.BranchID = s.BranchFK AND s.position = 'Supervisor' 
GROUP BY b.BranchID; 
は `on`の句にあなたの` WHERE`句を移動し
+0

これに注意すべきことは、 'position'という条件がjoinにあり、' where'節にないということです。 – JohnHC

+0

ありがとう私もこれを試してみましょう! – IsoFunCode

+0

これはうまくいきましたが、何をするのですか?女性の場合、SUM(s.gender = 'F' THEN 1 ELSE 0 END)?私はビューを作成するのを避けるためにどこでも検索しましたが、私はそれを見つけませんでした! – IsoFunCode

関連する問題