SQL外部联接视图

SQL外部联接视图,sql,join,outer-join,Sql,Join,Outer Join,首先,对不起,这个问题没有描述我的问题,我不知道如何把它作为问题来回答 我想数一数每个部门有多少女性和男性担任职位主管 这就是SQL: CREATE VIEW Women (BranchID,AnzahlF,position ) AS SELECT Branch.BranchID, COUNT(*) As AnzahlF,Staff.position FROM Staff full outer JOIN Branch

首先,对不起,这个问题没有描述我的问题,我不知道如何把它作为问题来回答

我想数一数每个部门有多少女性和男性担任职位主管

这就是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
这是输出: 布兰奇德、安扎尔弗苏夫、安扎尔姆苏夫
B001,2,0
B003,1,1
B004,1,1
B005,1,0
B006,1,0
B007,0,2
B008,1,1
B009,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。所以它没有超生物。那么如何得到这个结果呢

解决方案必须在视图中,因此如何将其隐藏

我什么都试过了,但毫无价值

希望你们能帮助我


谢谢

为什么要为此使用视图?只需
左连接
分组方式

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;

WHERE
子句移动到
ON
子句。它有效地使您的
外部联接
成为
内部联接
,因为它是在
外部联接
结果返回后执行的。谢谢,是的,这一定是内部联接有时您尝试了所有操作,尽管您知道没有,因为我将尝试此操作,谢谢!我试过这样做:选择Branch.BranchID,将(*)作为AnzahlM,Staff.position从Staff内部加入Branch.BranchID=Staff.BranchFK,性别像'F'和职位像'Supervisor'分组,按BranchID.BranchID,Staff.position但不起作用!同样的结果!需要注意的是,条件
position
在join中,而不是
where
子句中。谢谢,我也会尝试一下!所以,谢谢,这是有效的,但是:SUM(s.gender='F'的情况下,则为1,否则为0)和女性一样有效吗?我到处搜索只是为了避免创建视图,但我找不到@未编码。这是
sum()中的
案例
。因此,每名女性员工的总数加上1人——有效地计算了女性员工的数量。