我有以下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
答案 0 :(得分:6)
那是因为您的where
子句正在过滤掉没有字段的结果
{/ 1}}子句在之后应用;在where
子句中的条件应用之前 JOIN。
执行SQL ON
查询的[概念]过程是:
select
子句中所有表的笛卡尔积。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