6

コンポーネントのステータスと可用性に基づいて機能を一覧表示するクエリがあります

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)

私の結果は次のとおりです。

ID  Name    Impact  Visibility  Risk    Priority
403 Chevy   1       2           3       48
404 Nissan  1       1           1       24
405 Toyota  3       2           1       42

それ以外の

ID  Name    Impact  Visibility  Risk    Priority
403 Chevy   1       2           3       6
404 Nissan  1       1           1       3
405 Toyota  3       2           1       6

これらの各ブランドには、それぞれ 8、8、および 7 モデルがあります。つまり、私のクエリは優先度を計算するためにすべてのクエリを実行していることを意味します: Impact*models + Visibility*models + Risk*models.

その乗算を行わないように SQL クエリを取得するにはどうすればよいですか?

ありがとう

4

1 に答える 1

2

あなたのコメントに基づいて、そして私があなたが何を必要としているのか理解していない限り、私はあなたが必要とは思わないSUM()。各モデルの合計が欲しいだけだと思います。を使用するSUM()と、希望どおりに聞こえないすべてのレコードの合計を取得できます。GROUP BYこれはまたあなたとを削除しますHAVING

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)
于 2012-04-26T23:42:41.903 に答える