我有以下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
Run Code Online (Sandbox Code Playgroud)
我想要声明的是返回所有不同的结果(他们是否在Field DB中有计数).目前,Query仅返回具有计数的值.
即在重新拥有的数据库中我有
ID 1, 2 and 3
Result x, y, z
Run Code Online (Sandbox Code Playgroud)
只有x和z在字段DB中有需要此结果的字段,所以我才回来
Result x, z
count 1, 2
Run Code Online (Sandbox Code Playgroud)
我想要的是什么
Result x,y,z
Count 1,(null or 0), 2
Run Code Online (Sandbox Code Playgroud)
那是因为你的where
子句过滤掉没有字段的结果.在连接完成后应用
该where
子句; 在JOIN 之前应用该子句中的条件.ON
执行SQL select
查询的[概念]过程是:
from
子句中所有表的笛卡尔积.group by
子句中的条件(如果存在)将结果集划分为组.having
条款指定的条件(如果存在).order by
如果存在,则根据该条款对结果进行排序.compute
/ compute by
子句中指定的聚合函数的值(如果存在).所以...你需要这样做才能得到你想要的东西:
select Result = result.Result ,
ResultCount = count(field.fieldID)
from dbo.Results result
left join dbo.Fields field on field.Results = result.ID
and field.RegionID = @RegionID
group by result.Results
Run Code Online (Sandbox Code Playgroud)
以上将为每个结果提供一行,并指定区域中的匹配字段数(我相信您要求的).对于在指定区域中没有匹配字段的任何结果,计数将为零.
归档时间: |
|
查看次数: |
134 次 |
最近记录: |