如何在聚合中显示已过滤的行

时间:2013-09-20 09:04:00

标签: sql sql-server-2005 isnull group-by

给出以下查询:

    SELECT dbo.ClientSub.chk_Name as Details, COUNT(*) AS Counts
    FROM dbo.ClientMain 
      INNER JOIN 
        dbo.ClientSub 
          ON dbo.ClientMain.ate_Id = dbo.ClientSub.ate_Id 
    WHERE chk_Status=1 
    GROUP BY dbo.ClientSub.chk_Name

即使在WHERE子句中有过滤,我也希望显示聚合中的行。

4 个答案:

答案 0 :(得分:0)

如果你使用oracle sql:

您是否尝试过Select nvl(dbo.ClientSub.chk_name,'0') ....

答案 1 :(得分:0)

你是说这个意思吗?如果chk_Name为NULL,则返回count。

SELECT 
    dbo.ClientSub.chk_Name as Details, 
    SUM(CASE WHEN ISNULL(dbo.ClientSub.chk_Name, '')<>'' then 1 else 0 end) AS Counts
FROM 
    dbo.ClientMain INNER JOIN dbo.ClientSub ON dbo.ClientMain.ate_Id = dbo.ClientSub.ate_Id 
where chk_Status=1      
group by dbo.ClientSub.chk_Name

答案 2 :(得分:0)

我希望您使用的是Oracle。您可以直接使用count(chk_name)。在计数中传递列名会忽略空值。上面的查询返回每个chk_name组的记录总数。当您使用count(chk_name)时,它将计算chk_name不为空的所有记录。

我希望能回答你的问题。

谢谢,

阿迪蒂亚

答案 3 :(得分:0)

NULL值被视为零以用于聚合目的。

出于您的意图,您应该使用GROUP BY ALL来返回已过滤的行,其中零作为聚合值。