2012-12-19 37 views
5

Tôi đang đánh đầu chống lại cái gì đó, tôi chắc chắn, rất rõ ràng -sử dụng datepart() với nhóm theo lệnh

Tôi có một chút mã SQL được thiết kế để tính tổng giá bán của mỗi hóa đơn trong cửa hàng của tôi và sau đó sắp xếp nó theo tháng.

select SUM(totalsellingprice) from dbo.tblServiceOrders 
where datepart(MONTH,dbo.tblServiceOrders.datereceived) =12 

Theo như tôi hiểu, điều đó sẽ trả về tổng của tất cả các totatlsellingprice từ tháng 12 (tháng 12). Hiện tại, truy vấn này trả lại

135998.92 

Tuy nhiên, nếu sau đó tôi cố gắng đưa nó vào nhóm để làm cho nó nhổ ra trong tất cả các tháng, số lượng thay đổi.

select SUM(totalsellingprice) from dbo.tblServiceOrders 
group by datepart(MONTH,dbo.tblServiceOrders.datereceived) 

Và tôi nhận được bảng này -

1 - 110567.70 
2 - 60059.59 
3 - 135998.92 
4 - 63089.22 
5 - 102287.01 
6 - 71088.68 
7 - 149102.10 
8 - 67722.65 
9 - 67122.45 
10 - 64234.82 
11 - 7542.05 
12 - 130461.10 

Có 12 dòng, mà âm thanh tốt với tôi (12 tháng trong một năm) nhưng hàng cuối cùng là 130461.

như thế nào có thể hàng 12 từ tìm kiếm thứ hai không bằng với những gì tôi đã làm trong lần tìm kiếm đầu tiên? Tôi cảm thấy như tôi đang thiếu một cái gì đó hiển nhiên nhưng tôi không thể cho cuộc sống của tôi tìm ra những gì.

Bất kỳ và tất cả trợ giúp sẽ được đánh giá cao!

+0

Bạn có thể cho tôi biết kiểu dữ liệu và định dạng của cột 'được đánh giá' không? – Mari

+1

Dường như với tôi ... có lẽ ai đó đã bán với giá 5537.82 $ khi bạn thực hiện truy vấn bằng cách sử dụng 'where'? (laf) –

Trả lời

13

tôi đã nhận nó:

truy vấn của bạn là rất khó hiểu vì nó không bao gồm các cột MONTH:

Nếu bạn sẽ đã làm điều đó, bạn sẽ nhận ra rằng truy vấn của bạn không được MONTH đặt hàng và vì vậy, MONTH 12 được trả về làm hàng thứ 3 trong truy vấn của bạn.

;)

select SUM(totalsellingprice) from dbo.tblServiceOrders 
group by datepart(MONTH,dbo.tblServiceOrders.datereceived) 
order by datepart(MONTH,dbo.tblServiceOrders.datereceived) 

Và làm ơn, đừng đề cập đến chỉ số hàng để chọn tháng có liên quan đến mà tiền. Và nên là một ý kiến ​​hay để phân biệt đối xử trong năm (nếu bạn cần).

+0

Haha. Trời ơi. Tôi đã gãi đầu cố gắng tìm hiểu xem liệu tôi có thể nghĩ ra một kịch bản mà GROUP BY đã loại bỏ các hàng ... – DeanGC

+0

+1 để đề cập đến năm –

+0

@DeanGC: Hahaha tôi cũng vậy, đã thực hiện một loạt các thử nghiệm! >, <' –

0

Run này và xem những gì nó làm ...

select dateadd(month, datediff(month, 0, datereceived), 0), 
     Sum(totalsellingprice) 
from dbo.tblServiceOrders 
group by dateadd(month, datediff(month, 0, datereceived), 0)