0

给定以下查询:

    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

4 回答 4

0

如果您使用 oracle sql:

你试过Select nvl(dbo.ClientSub.chk_name,'0') .... 吗?

于 2013-09-20T09:15:45.233 回答
0

你是这个意思吗?如果 chk_Name 为 NULL,则返回计数 0。

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
于 2013-09-20T09:16:08.357 回答
0

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

我希望这能回答你的问题。

谢谢,

阿迪亚

于 2013-09-20T09:20:29.960 回答
0

NULL出于聚合目的,值被视为零。

为了您的意图,您应该使用GROUP BY ALL它返回也被过滤的行,零作为聚合值。

于 2013-09-20T09:24:55.320 回答