为没有结果而替换为 0 的 SQL 语句

标签 sql

我在从 SQL 语句中获取我想要的结果时遇到问题。我知道我可能遗漏了一些简单的东西,但我就是看不到它。

这是我的 table 。

表:用户(RoleID 链接到 Roles 表中的 ID)
ID、名字、姓氏、角色 ID
1,马特,瑞恩,1
2、奇普、琼斯、1
3、胡里奥、琼斯、2
4、杰森、伯恩、3

表:角色
身份证、姓名
1、现场代表
2、技术
3、管理员

表:FRrequests(用户 ID 链接到用户表中的 ID)
ID、用户 ID、状态
1, 1, 打开
2、1、提交
3, 1, 延迟
4, 1, 完成

我想要的是一个 SQL 语句,它向我显示所有现场代表的所有“已提交”和“延迟”请求的计数。以下是所需结果的示例。

姓名计数
奇普琼斯 0
马特瑞恩 2

这是我到目前为止的陈述以及它给我的结果。

SELECT Users.FirstName + ' ' + Users.LastName AS Name, COUNT(FRrequests.ID) AS 'Open Requests'
从用户内部连接
角色 ON Users.RoleID = Roles.ID LEFT OUTER JOIN
FRrequests ON Users.ID = FRrequests.UserID
WHERE (Roles.Name = N'Field Rep') AND (FRrequests.Status = 'Submitted' OR FRrequests.Status = 'Delayed')
GROUP BY Users.FirstName, Users.LastName

姓名计数
马特瑞恩 2

我知道“AND (FRrequests.Status = 'Submitted' OR FRrequests.Status = 'Delayed')”部分是破坏它的原因。如果我没有在语句中运行它,我会得到所有用户,但它会计算所有状态,而不仅仅是提交和延迟。我只是无法弄清楚我缺少什么才能让它发挥作用。任何帮助将不胜感激。

最佳答案

您真的很接近,请尝试以下操作:

SELECT U.FirstName + ' ' + U.LastName AS Name, COUNT(F.ID) AS 'Open Requests'
FROM Users U
INNER JOIN Roles R
    ON U.RoleID = R.ID 
LEFT JOIN ( SELECT * FROM FRrequests 
            WHERE Status IN ('Submitted','Delayed')) F
    ON U.ID = F.UserID
WHERE R.Name = N'Field Rep' 
GROUP BY U.FirstName, U.LastName

关于为没有结果而替换为 0 的 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13278315/

相关文章:

sql - 查询数据库中有共同标签的地点

sql - 对于所有评论者对,使得两位评论者都对同一部电影进行了评级,返回两位评论者的姓名

sql - 如何根据数量进行 SQL 查询

SQL - SUM、Distinct 和 TOP 4

mysql - 使用变量选择列

sql - 使用 SQL 在字符串中存储超过 8000 个字符

sql - 索引 SQL 数据库会减慢插入太多

SQL Server 数据库大小 - 为什么这么大?

mysql - 将大文件中的数据高效上传到数据库

sql - 分区表查询仍在扫描所有分区