sql - 分组依据不显示所有行

标签 sql sql-server sql-server-2008 pivot

我有一个表 tblPersonaldatatblStudentsadmitted

tblPersonalData

UID  Name Gender
------------------------ 
 E1   xyz   M
 E2   pqr   M
 E3   mno   M

tblStudentsadmitted

UID   Status  Stage
----------------------
E1     Y        1
E2     Y        2
E3     Y        1

现在我想要这样的数据:

Gender  Stage1   Stage2
 M        2       1

但在这种情况下,我没有获得女性性别的数据。我想要女性性别的数据,即使它为空

我试过这个:

select 
    case 
        when gender='M' then 'Male' 
        when gender='F' then 'Female' 
    end as Gender,
    sum(case when Stage=1 then 1 else 0) end as Stage1,
    sum(case when Stage=2 then 1 else 0) end as Stage2
from  tblPersonaldata A inner join 
      tblStudentsadmitted B on A.UID=B.UID 
where B.Status='Y'
group by Gender

最佳答案

<罢工>

<罢工>
SELECT  CASE WHEN a.Gender = 'M' THEN 'Male' ELSE 'FEMALE' END Gender,
        SUM(CASE WHEN Stage = 1 THEN 1 ELSE 0 END) Stage1,
        SUM(CASE WHEN Stage = 2 THEN 1 ELSE 0 END) Stage2
FROM    personal a
        LEFT JOIN studentadmitted b
            ON a.UID = b.UID AND b.Status = 'Y'
GROUP   BY a.Gender

<罢工>

SELECT  CASE WHEN c.Gender = 'M' THEN 'Male' ELSE 'Female' END Gender,
        SUM(CASE WHEN Stage = 1 THEN 1 ELSE 0 END) Stage1,
        SUM(CASE WHEN Stage = 2 THEN 1 ELSE 0 END) Stage2
FROM    (SELECT 'F' Gender UNION SELECT 'M' Gender) c
        LEFT JOIN personal a
            ON a.Gender = c.Gender
        LEFT JOIN studentadmitted b
            ON a.UID = b.UID AND b.Status = 'Y'
GROUP   BY c.Gender

输出

╔════════╦════════╦════════╗
║ GENDER ║ STAGE1 ║ STAGE2 ║
╠════════╬════════╬════════╣
║ Female ║      0 ║      0 ║
║ Male   ║      2 ║      1 ║
╚════════╩════════╩════════╝

关于sql - 分组依据不显示所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15360098/

相关文章:

MySQL 使用 IN 子句和子查询进行更新

mysql - SQL 我的子查询永远加载

mysql - 左外连接未将第二个表显示为空

sql - 我需要sql server中的一个函数来在输入字符串的每个位置插入一个空格

日期时间类型的 SQL LIKE 语句

.net - 如何解决间歇性 SQL 超时错误

mysql - 从 MySQL (MariaDB) 中的存储过程返回 ROW COUNT

c# - 从html文件导入数据到sql数据库

sql-server - SQL Server 存储过程需要声明标量变量

sql-server-2008 - 比较SQL Server中的日期字段