2012-04-26 39 views
6

Tôi có một truy vấn mà liệt kê các tính năng, dựa trên tình trạng các thành phần và tính sẵn sàngtruy vấn SQL nhân kết quả SUM bởi số lượng của các yếu tố bên trong

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) 

kết quả của tôi như sau:

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

Thay vì

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

Mỗi thương hiệu trong số này có các mẫu 8, 8 và 7 tương ứng. Điều này có nghĩa là truy vấn của tôi đang làm cho tất cả các truy vấn đó để tính mức độ ưu tiên: Impact*models + Visibility*models + Risk*models.

Làm cách nào để truy vấn SQL của tôi không thực hiện phép nhân đó?

Cảm ơn

+0

là ưu tiên của bạn chỉ là tổng số tác động, khả năng hiển thị và rủi ro? – Taryn

+0

Vâng @bluefeet đúng vậy. – LanFeusT

Trả lời

2

Dựa trên nhận xét của bạn và trừ khi tôi không hiểu những gì bạn cần, tôi không nghĩ rằng bạn cần SUM(). Tôi nghĩ bạn chỉ muốn tổng số cho mỗi mô hình. Sử dụng SUM() bạn sẽ nhận được tổng số cho tất cả các bản ghi mà nó không âm thanh như bạn muốn. Điều này cũng sẽ xóa 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

Ok bây giờ tôi chỉ cảm thấy ngu ngốc vì không cố gắng ... ^^ Cảm ơn bạn! – LanFeusT

+1

@LanFeusT chúng ta đều làm điều đó ngay bây giờ và một lần nữa. đôi khi phải mất thêm một đôi mắt. :) – Taryn

Các vấn đề liên quan