Sql CASE语句计算中重复行的求和

Sql CASE语句计算中重复行的求和,sql,sql-server,group-by,count,duplicates,Sql,Sql Server,Group By,Count,Duplicates,我有一个case语句,它通过每个项目的标志计算分数,但分配给项目的用户 这是一个符合/不符合项的计数,我的问题是,如果一个项在表中有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 ELS

我有一个case语句,它通过每个项目的标志计算分数,但分配给项目的用户

这是一个符合/不符合项的计数,我的问题是,如果一个项在表中有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
这是下面的无效结果(我在item列中添加了此结果,但这不会包含在我的查询中,因为我仅按用户id分组)

此用户有4个项,但表中的项2有2行,因此当我希望它为1时,显示不符合2

如何使用case语句使其向后拉1行。我必须按用户而不是项对结果进行分组,因为数据加载到另一个只包含用户的表中

第2项应仅包含1个不合规计数和1个总计数

但当我按用户对数据进行分组时,它应该是这样的:

Usera   0   4   4
Usera应该有4个不符合项的计数,但目前我得到了5个,因为其中一个项有2行

使用
计数(不同)
而不是总和

e、 g

使用计数(不同)而不是总和

e、 g


我怀疑您想要
不同的

SELECT 
    user_id,    
    COALESCE(COUNT(DISTINCT CASE WHEN score_flag = 'Y' THEN item END), 0) AS Compliant_Count,
    COALESCE(COUNT(DISTINCT CASE WHEN score_flag = 'N' THEN item END), 0)  AS NonCompliant_Count,
    COUNT(DISTINCT CASE WHEN score_flag IN ('Y', 'N') THEN item END) AS Total_count
FROM mytable
GROUP BY user_id
注:

  • 查询中没有定义
    user
    表别名,因此
    user.id
    无效。我将其重命名为
    user\u id
  • 不要对列别名使用单引号-单引号应仅用于字符串文字
  • 如果Y和N是唯一可能的值,则最后一个表达式可以简化为仅
    COUNT(不同项)

我怀疑您想要的是不同的

SELECT 
    user_id,    
    COALESCE(COUNT(DISTINCT CASE WHEN score_flag = 'Y' THEN item END), 0) AS Compliant_Count,
    COALESCE(COUNT(DISTINCT CASE WHEN score_flag = 'N' THEN item END), 0)  AS NonCompliant_Count,
    COUNT(DISTINCT CASE WHEN score_flag IN ('Y', 'N') THEN item END) AS Total_count
FROM mytable
GROUP BY user_id
注:

  • 查询中没有定义
    user
    表别名,因此
    user.id
    无效。我将其重命名为
    user\u id
  • 不要对列别名使用单引号-单引号应仅用于字符串文字
  • 如果Y和N是唯一可能的值,则最后一个表达式可以简化为仅
    COUNT(不同项)

案例表达式
-这不是一个语句。您真正想看到的结果是什么?第1、2和4项都可以,但第2项应该是这样的:usera item2 0 1 1提供表数据和预期结果建议不是该信息的正确位置,@Blowers。您的问题。
case expression
-这不是一个语句。您真正想看到的结果是什么?第1、2和4项都可以,但第2项应该是这样的:usera item2 0 1 1提供表数据和预期结果建议不是该信息的正确位置,@Blowers。你的问题。是的,这就成功了!感谢大家在这方面的帮助,并为我繁琐的问题更新表示歉意:)是的,这就成功了!感谢大家在这方面的帮助,并对我对问题的繁琐更新表示歉意:)
SELECT 
    user_id,    
    COALESCE(COUNT(DISTINCT CASE WHEN score_flag = 'Y' THEN item END), 0) AS Compliant_Count,
    COALESCE(COUNT(DISTINCT CASE WHEN score_flag = 'N' THEN item END), 0)  AS NonCompliant_Count,
    COUNT(DISTINCT CASE WHEN score_flag IN ('Y', 'N') THEN item END) AS Total_count
FROM mytable
GROUP BY user_id