2012-09-27 28 views
6

Đây là lần đầu tiên tôi yêu cầu sự giúp đỡ của bạn,Tổng số tiền không chính xác khi tôi tham gia một bảng thứ hai

Thực ra tôi phải tạo truy vấn và thực hiện một ví dụ tương tự cho nó. Tôi có hai bảng,

Report (ReportID, Date, headCount) 
Production(ProdID, ReportID, Quantity) 

Câu hỏi của tôi đang sử dụng truy vấn này, tôi nhận được một kết quả sai,

SELECT  
    Report.date, 
    SUM(Report.HeadCount) AS SumHeadCount, 
    SUM(Production.Quantity) AS SumQuantity 
FROM   
    Report 
INNER JOIN 
    Production ON Report.ReportID = Production.ReportID 
GROUP BY 
    Date 
ORDER BY 
    Date 

Tôi đoán một số hàng đang được tính nhiều lần, bạn có thể xin vui lòng cho tôi một bàn tay ?

EDIT

nếu tôi chạy một truy vấn để có được một khoản số lượng nhân viên được nhóm theo ngày, tôi nhận được:

date  Headcount 
7/2/2012 1843 
7/3/2012 1802 
7/4/2012 1858 
7/5/2012 1904 

cũng cho sản xuất Số lượng tôi nhận được:

2012-07-02 8362 
2012-07-03 8042 
2012-07-04 8272 
2012-07-05 9227 

nhưng khi tôi kết hợp cả hai truy vấn tôi nhận được i sai một, tôi mong đợi vào ngày 2 tháng 7 8362 qty so với năm 1843, nhưng tôi nhận được:

day  TotalHeadcount totalQty 
7/2/2012 6021 8362 
7/3/2012 7193 8042 
7/4/2012 6988 8272 
7/5/2012 7197 9227 
+6

gì sai với kết quả mà bạn nhận được? Bạn có thể đăng một số dữ liệu mẫu và kết quả mong đợi không? – Taryn

+1

@bluefeet - Nó sẽ được tổng hợp Report.HeadCount nhiều lần cho mỗi hàng đưa vào bởi tham gia. –

+1

@MartinSmith Tôi đồng ý với bạn, nhưng tôi muốn OP làm rõ vấn đề là gì với kết quả. Càng chi tiết càng tốt. :) – Taryn

Trả lời

1

Nhóm hồ sơ cho mỗi ngày sử dụng sau

SELECT ReportSummary.ReportDate, SUM(ReportSummary.SumHeadCount) AS SumHeadCount, SUM(ProductionSummary.SumQuantity) AS SumQuantity 
FROM 
(
    SELECT Report.ReportDate, SUM(Report.HeadCount) AS SumHeadCount 
    FROM Report 
    GROUP BY Report.ReportDate 
) AS ReportSummary 
INNER JOIN 
(
    SELECT Report.ReportDate, Sum(Production.Quantity) AS SumQuantity 
    FROM Production 
    INNER JOIN Report 
    ON Report.ReportID = Production.ReportID 
    GROUP BY Report.ReportDate 
) AS ProductionSummary 
ON ReportSummary.ReportDate = ProductionSummary.ReportDate 
GROUP BY ReportSummary.ReportDate 
ORDER BY ReportSummary.ReportDate 
+0

Cột 'ReportSummary.SumHeadCount' không hợp lệ trong danh sách lựa chọn vì nó không được chứa trong hàm tổng hợp hoặc mệnh đề GROUP BY. – alphawt

+0

Đã chỉnh sửa. Xin vui lòng kiểm tra bây giờ – Prasanna

2

này có thể hữu ích

SELECT Report.ReportDate, 
     Sum(Report.HeadCount) AS SumHeadCount, 
     ProductionSummary.SumQuantity 
FROM Report 
     INNER JOIN (SELECT ReportID, 
          Sum(Production.Quantity) AS SumQuantity 
        FROM Production 
        GROUP BY ReportID) AS ProductionSummary 
     ON Report.ReportID = ProductionSummary.ReportID 
GROUP BY ReportDate 
ORDER BY ReportDate 
+0

Có. cảm ơn bạn đã trả lời. Đã chỉnh sửa câu trả lời – Prasanna

+0

im bằng SQL SERVER 2008 – alphawt

3

Một cách để tránh điều này (tùy thuộc vào hỗ trợ RDBMS) sẽ là

WITH R 
    AS (SELECT *, 
       Sum(HeadCount) OVER (PARTITION BY date) AS SumHeadCount 
     FROM Report) 
SELECT R.date, 
     SumHeadCount, 
     Sum(P.Quantity) AS SumQuantity 
FROM R 
     JOIN Production P 
     ON R.ReportID = P.ReportID 
GROUP BY R.date, SumHeadCount 
ORDER BY R.date 
+0

tôi đã áp dụng ý tưởng của bạn và tôi đã nhận được nó! cảm ơn bạn rất nhiều ^^ – alphawt

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