Sql 使用case语句显示列中两种类型值的计数
需要在同一行上显示已尝试和已完成的值吗Sql 使用case语句显示列中两种类型值的计数,sql,Sql,需要在同一行上显示已尝试和已完成的值吗 SELECT qt.name, CASE WHEN qr.isfinished = 0 THEN COUNT(qr.resultid) END AS 'Attempted', CASE WHEN qr.isfinished = 1 THEN COUNT(qr.resultid) END AS 'Completed' 谢谢你的帮助 如果已完成为位,则无法在其上进行聚合。 案子就在伯
SELECT
qt.name,
CASE
WHEN qr.isfinished = 0 THEN COUNT(qr.resultid)
END AS 'Attempted',
CASE
WHEN qr.isfinished = 1 THEN COUNT(qr.resultid)
END AS 'Completed'
谢谢你的帮助 如果
已完成
为位
,则无法在其上进行聚合。案子就在伯爵的办公室里
Name attempted Completed
--------------------------------
Algebra I 114 NULL
Algebra II 47 NULL
ASVAB 55 NULL
Algebra I NULL 69
Algebra II NULL 55
ASVAB NULL 84
有多种方法可以做到这一点,例如,可以通过连接来实现,也可以使用group by,如下所示:
SELECT qt.name,
count(Case when qr.isfinished = 0 THEN 1 END) as 'Attempted',
count(Case when qr.isfinished = 1 THEN 1 END) as 'Completed'
FROM
...
GROUP BY
qt.name
为了让它们在同一行上,您需要根据它们的共同点进行分组。根据您在问题中给出的信息,我假设这是qt.name
接下来,您可以使用总和聚合来获取每个字段的计数。符合每个项目标准的所有记录都计入总和,其他记录则不计入。您还可以将count与1和Null一起使用,我更喜欢使用Sum,因为如果需要,它可以允许加权合计 这运行了,但是它显示0,而不是null,并且仍然重复行=/和isfinished是位,感谢指针!不,你没有运行这个代码。计数不可能为空(等于零或大于零),也不可能用单个组复制行。我编辑了我的原始帖子以显示结果和查询。我的错误是,我有一个额外的GROUP by列。再次感谢你!那么,你想说点什么吗?
SELECT
qt.name,
SUM(CASE qr.isfinsihed WHEN 1 THEN 1 ELSE 0) AS 'Attempted',
SUM(CASE qr.isfinished WHEN 0 THEN 1 ELSE 0) AS 'Completed'
FROM -- what ever your from clause is, it goes here --
GROUP BY
qt.name