Sql 空字段的重复记录计数-有更好的方法吗?
我需要根据特定列获取重复记录计数。若字段有空值,则不视为重复字段Sql 空字段的重复记录计数-有更好的方法吗?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我需要根据特定列获取重复记录计数。若字段有空值,则不视为重复字段 SELECT Leadid,COUNT(Lead) FROM #CheckNULLCOUNT GROUP BY LeadId,Lead 但对于以下查询,它认为是重复的 SELECT Leadid,COUNT(ISNULL(Lead,'-')) FROM #CheckNULLCOUNT GROUP BY LeadId,Lead 我的问题是,有没有更好的方法来获取空列的重复计数 作为替代解
SELECT Leadid,COUNT(Lead)
FROM #CheckNULLCOUNT
GROUP BY LeadId,Lead
但对于以下查询,它认为是重复的
SELECT Leadid,COUNT(ISNULL(Lead,'-'))
FROM #CheckNULLCOUNT
GROUP BY LeadId,Lead
我的问题是,有没有更好的方法来获取空列的重复计数
作为替代解决方案,您可以使用以下两种:
SELECT Leadid,COUNT(Lead)
FROM #CheckNULLCOUNT
GROUP BY LeadId,
CASE WHEN Lead IS NULL
THEN CAST(LeadId AS varchar(8))
ELSE Lead END, Lead
但是因为演员阵容不太好。我只是想补充一点,看看另一个想法,小组本身如何使用案例…当作为替代解决方案时,您可以使用以下两个:
SELECT Leadid,COUNT(Lead)
FROM #CheckNULLCOUNT
GROUP BY LeadId,
CASE WHEN Lead IS NULL
THEN CAST(LeadId AS varchar(8))
ELSE Lead END, Lead
但是因为演员阵容不太好。我只是想补充一点,看看另一个想法,团队如何单独使用案例……当为什么不
SELECT Leadid,COUNT(*)
FROM #CheckNULLCOUNT
GROUP BY LeadId,Lead
为什么不
SELECT Leadid,COUNT(*)
FROM #CheckNULLCOUNT
GROUP BY LeadId,Lead
谢谢我得到了它。如果我们使用SUM,将有任何性能损失。不,SUMCASE当Lead为NULL时,则1其他0 END totalNULL与COUNTCASE相同当Lead为NULL时,则1 END totalNULL使用您的解决方案,我们必须在两列中进行检查,我们只能在列中获得。我的查询按Leadid从CheckNULLCOUNT组中选择Leadid,COUNTISNULLLead,“-”,Lead在列中返回null/non null。像那样,谢谢。我得到了它。如果我们使用SUM,将有任何性能损失。不,SUMCASE当Lead为NULL时,则1其他0 END totalNULL与COUNTCASE相同当Lead为NULL时,则1 END totalNULL使用您的解决方案,我们必须在两列中进行检查,我们只能在列中获得。我的查询按Leadid从CheckNULLCOUNT组中选择Leadid,COUNTISNULLLead,“-”,Lead在列中返回null/non null。就像那样。谢谢你提供另一个解决方案。但我不明白“分组如何使用CASE”的意思…当您通常想要实现的是:使用分组方式并基于条件计数时,您可以通过使用CASE条件来实现…当分组中的语句单独使用时。感谢您提供另一个解决方案。但我不明白GROUP本身如何使用CASE…WHENI ments的意思,这是您通常想要实现的:使用GROUP by并基于条件计数,您可以通过使用CASE…WHEN语句来实现。如果我们使用*这将是额外的查询负担。@HelloResh这不是真的。使用*计数的成本不超过使用列的成本。而且可以少一些。@helloSuresh我想它不会有额外的成本。。。但是,无论如何。。应该算一个常数。。如果你愿意的话。。如按Leadid从CheckNULLCOUNT GROUP中选择Leadid,count3.14159265359,Leadyou是对的。我的印象是,在计数中使用*将对性能产生影响。如果表中有一百万行,它会应用吗?@hellosresh如果我没有弄错从表中执行select count*,sqlserver会选择最窄的索引来执行计数,它不会从表中收集所有数据进行计数。。。所以我真的认为它不会有更多的成本。。如果您的表有一百万行,我希望它的索引非常好。如果没有索引,则计数必须进行扫描,然后可能会影响性能。如果使用*将增加查询负担。@helloSuresh这不是真的。使用*计数的成本不超过使用列的成本。而且可以少一些。@helloSuresh我想它不会有额外的成本。。。但是,无论如何。。应该算一个常数。。如果你愿意的话。。如按Leadid从CheckNULLCOUNT GROUP中选择Leadid,count3.14159265359,Leadyou是对的。我的印象是,在计数中使用*将对性能产生影响。如果表中有一百万行,它会应用吗?@hellosresh如果我没有弄错从表中执行select count*,sqlserver会选择最窄的索引来执行计数,它不会从表中收集所有数据进行计数。。。所以我真的认为它不会有更多的成本。。如果您的表有一百万行,我希望它的索引非常好。如果没有索引,则计数必须进行扫描,这样可能会影响性能。。