SQL查询将SUM结果乘以内部元素的数量

Lan*_*usT 6 sql stored-procedures

我有一个查询功能,根据组件状态和可用性列出功能

SELECT Brand.Id
  , Brand.Name
  , Brand.Impact
  , Brand.Visibility
  , Brand.Risk
  , SUM(Brand.Impact + Brand.Visibility + Brand.Risk) AS Priority

FROM Brand 
LEFT OUTER JOIN Type 
  ON Brand.Id = Type.FeatureId 
LEFT OUTER JOIN Model 
  ON Type.Id = Model.SubFeatureId 
LEFT OUTER JOIN TestingStatus 
  ON Model.StatusId = TestingStatus.Id

WHERE (Model.IsDeleted = 'False') 
  AND (Brand.IsDeleted = 'False') 
  AND (Type.IsDeleted = 'False')
  AND (@TeamId = 0 OR Model.TeamId = @TeamId)
GROUP BY Brand.YearId, Brand.Id, Brand.Name, Brand.Impact, Brand.Visibility, Brand.Risk
HAVING (Brand.YearId = @YearId)
Run Code Online (Sandbox Code Playgroud)

我的结果如下:

ID  Name    Impact  Visibility  Risk    Priority
403 Chevy   1       2           3       48
404 Nissan  1       1           1       24
405 Toyota  3       2           1       42
Run Code Online (Sandbox Code Playgroud)

代替

ID  Name    Impact  Visibility  Risk    Priority
403 Chevy   1       2           3       6
404 Nissan  1       1           1       3
405 Toyota  3       2           1       6
Run Code Online (Sandbox Code Playgroud)

这些品牌中的每一个都分别有8,8和7个型号.这意味着我的查询正在为所有人计算优先级:Impact*models + Visibility*models + Risk*models.

如何让我的SQL查询不进行乘法运算?

谢谢

Tar*_*ryn 2

根据您的评论,除非我不明白您需要什么,否则我认为您不需要SUM(). 我想你只想要每个模型的总数。使用 ,SUM()您将获得所有记录的总数,但这听起来不像您想要的。这也会删除您的GROUP BYHAVING

SELECT Brand.Id
  , Brand.Name
  , Brand.Impact
  , Brand.Visibility
  , Brand.Risk
  , (Brand.Impact + Brand.Visibility + Brand.Risk) AS Priority

FROM Brand 
LEFT OUTER JOIN Type 
  ON Brand.Id = Type.FeatureId 
LEFT OUTER JOIN Model 
  ON Type.Id = Model.SubFeatureId 
LEFT OUTER JOIN TestingStatus 
  ON Model.StatusId = TestingStatus.Id

WHERE (Model.IsDeleted = 'False') 
  AND (Brand.IsDeleted = 'False') 
  AND (Type.IsDeleted = 'False')
  AND (@TeamId = 0 OR Model.TeamId = @TeamId)
  AND (Brand.YearId = @YearId)
Run Code Online (Sandbox Code Playgroud)