2012-04-26 66 views
6

我有一個查詢,列出的特徵,基於組件的狀態和可用性的添加量乘以SUM結果SQL查詢通過內部元素

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查詢不執行乘法?

感謝

+0

就是你優先剛剛應該是總的影響,可見性和風險? – Taryn 2012-04-26 23:39:29

+0

是@bluefeet,這是正確的。 – LanFeusT 2012-04-26 23:41:29

回答

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) 
+0

好了,現在我只是覺得不要這麼做而感到愚蠢...... ^^謝謝! – LanFeusT 2012-04-26 23:47:57

+1

@LanFeusT我們都一次又一次地做到這一點。有時需要額外的一雙眼睛。 :) – Taryn 2012-04-26 23:48:42