6

我正在用我的头来对抗一些东西,我敢肯定,非常明显 -

我有一些 SQL 代码,旨在汇总我商店中每张发票的总售价,然后按月份进行组织。

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

据我了解,这应该返回从第 12 个月(12 月)开始的所有总售价的总和。目前,此查询返回

135998.92

但是,如果我然后尝试将其放入一个组中,让它在所有月份都吐出来,那么这个数字就会改变。

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

我得到这张桌子 -

 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

有 12 行,这对我来说听起来不错(一年 12 个月),但最后一行是 130461。

第二次搜索中的第 12 行怎么可能不等于我在第一次搜索中所做的?我觉得我错过了一些明显的东西,但我一生都无法弄清楚是什么。

任何和所有的帮助将不胜感激!

4

2 回答 2

14

我知道了:

您的查询非常混乱,因为它不包括 MONTH 列:

如果您这样做了,您就会意识到您的查询不是按 MONTH 排序的,因此 MONTH 12 作为查询的第 3 行返回。

;)

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

请不要参考行索引来选择哪个月份与哪个总和有关。并且区分年份应该是一个好主意(如果需要)。

于 2012-12-19T17:04:39.493 回答
0

运行它,看看它做了什么......

 select dateadd(month, datediff(month, 0, datereceived),  0),
      Sum(totalsellingprice) 
 from dbo.tblServiceOrders
 group by dateadd(month, datediff(month, 0, datereceived),  0)
于 2012-12-19T16:56:18.360 回答