SQL语句不返回所有字段

时间:2011-07-14 16:55:18

标签: sql join

我有以下SQL语句:

    SELECT r.Result AS Resuly, 
           COUNT(f.fieldID) AS [Count] 
      FROM dbo.Fields f
RIGHT JOIN dbo.Results r ON f.Results = r.ID
     WHERE f.RegionID = @RegionID
  GROUP BY r.Result

我想要声明的是返回所有不同的结果(他们是否在Field DB中有计数)。目前,Query仅返回具有计数的值。

即在重新安装数据库中我有

ID 1, 2 and 3
Result x, y, z

只有x和z在字段DB中包含需要此结果的字段,所以我只能返回

Result x, z
count 1, 2

我想要的是

Result x,y,z
Count 1,(null or 0), 2

2 个答案:

答案 0 :(得分:6)

那是因为您的where子句正在过滤掉没有字段的结果 {/ 1}}子句在之后应用;在where子句中的条件应用之前 JOIN。

执行SQL ON查询的[概念]过程是:

  • 计算select子句中所有表的笛卡尔积。
  • 应用加入条件
  • 如果存在,请应用where标准。
  • 根据from子句中的条件(如果存在)将结果集划分为组。
  • 计算指定的任何汇总(聚合)函数的值,将每个组折叠为单个行,其列仅包含聚合函数,常量值或分组列。
  • 应用group by子句指定的条件(如果存在)。
  • 根据having子句对结果进行排序(如果存在)。
  • 计算order by / compute子句中指定的聚合函数的值(如果存在)。

所以......你需要这样做才能得到你想要的东西:

compute by

以上将为每个结果提供一行,并指定区域中的匹配字段数(我相信您要求的)。对于在指定区域中没有匹配字段的任何结果,计数将为零。

答案 1 :(得分:0)

如果没有字段,我们如何根据@RegionID参数过滤结果? - 它是影响结果集的WHERE子句,因为它声明了Fields表的条件。我在猜测:

SELECT r.Result AS Result, COUNT(f.fieldID) AS [Count] FROM dbo.Fields f
RIGHT OUTER JOIN dbo.Results r ON f.Results = r.ID
WHERE f.RegionID = @RegionID OR f.RegionID is null
GROUP BY r.Result