Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 空字段的重复记录计数-有更好的方法吗?_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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会选择最窄的索引来执行计数,它不会从表中收集所有数据进行计数。。。所以我真的认为它不会有更多的成本。。如果您的表有一百万行,我希望它的索引非常好。如果没有索引,则计数必须进行扫描,这样可能会影响性能。。