【发布时间】:2020-09-19 14:04:26
【问题描述】:
我有一个案例语句,它通过每个项目的标志计算分数,但分配给项目的用户。
它是合规/不合规项目的计数,我的问题是,如果一个项目在表中有 2 行,则将其计为 2 不合规,而它应该是 1。
这是基本的案例陈述:
SELECT
user.id,
sum( CASE WHEN SCORE_FLAG = 'Y' THEN 1 ELSE 0 END) AS 'Compliant_Count',
sum( CASE WHEN SCORE_FLAG = 'N' THEN 1 ELSE 0 END) AS 'NonCompliant_Count',
sum( CASE WHEN SCORE_FLAG = 'Y' or SCORE_FLAG = 'N' then 1 ELSE 0 END) AS 'Total_count'
FROM Table
Group By user.id
这是下面的无效结果(我在项目列中添加了 - 但这不会包含在我的查询中,因为我只按用户 ID 分组)。
usera item1 0 1 1
usera item2 0 2 2--
usera item3 0 1 1
usera item4 0 1 1
此用户有 4 个项目,但项目 2 在表中有 2 行,因此当我希望它为 1 时,它显示为 2 的不合规。
如何使用 case 语句将其拉回 1 行。我必须按用户而不是项目对结果进行分组,因为数据被加载到另一个只包含用户的表中。
第 2 项应该只有 1 个不合规计数和 1 个总计数
但是当我按用户对数据进行分组时,它应该如下所示:
Usera 0 4 4
Usera 应该有 4 个不合规项目,但目前我得到的计数是 5,因为其中一个项目有 2 行
【问题讨论】:
-
case expression- 这不是一个声明。 -
您真正希望看到的结果是什么?
-
item 1,2 & 4 都可以,但是 item 2 应该是这样的:usera item2 0 1 1
-
提供表格数据和预期结果
-
评论不是该信息的正确位置,@Blowers。 edit你的问题。
标签: sql sql-server group-by count duplicates