Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将datepart()与GROUPBY命令一起使用_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 将datepart()与GROUPBY命令一起使用

Sql 将datepart()与GROUPBY命令一起使用,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我在用我的头来打击一些,我确信,非常明显的东西- 我有一些SQL代码,用来计算我商店里每张发票的总售价,然后按月组织 select SUM(totalsellingprice) from dbo.tblServiceOrders where datepart(MONTH,dbo.tblServiceOrders.datereceived) =12 据我所知,这应返回12月(12月)的所有总售价的总和。当前,此查询返回 135998.92 然而,如果我试着把它放到一个小组里,让它吐出所有的月份

我在用我的头来打击一些,我确信,非常明显的东西-

我有一些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行怎么可能与第一次搜索不相等?我觉得我错过了一些显而易见的东西,但我一辈子都想不出是什么


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

运行此命令并查看它的功能

 select dateadd(month, datediff(month, 0, datereceived),  0),
      Sum(totalsellingprice) 
 from dbo.tblServiceOrders
 group by dateadd(month, datediff(month, 0, datereceived),  0)
我明白了:

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

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

)()


请不要参考行索引来选择哪个月与哪个金额相关。如果需要的话,还可以区分年份。

你能告诉我“datereceived”列的数据类型和格式吗?对我来说似乎很好……当你使用
where
执行查询时,可能有人卖出了5537.82美元?(laf)哈哈。哦,老兄。我一直在挠头,想知道我是否能想出一个场景,让GROUP BY消除行…@DeanGC:哈哈哈,我也做了一系列测试!>,你是个救生员!非常感谢。PS-我通常会包括年份,但为了明确问题的症结,我喜欢消除所有无关代码(我也会在实际查询中整理无效发票和其他一些东西)。这将是一个有趣的面试问题,以测试对细节的关注:)
select SUM(totalsellingprice) from dbo.tblServiceOrders
group by datepart(MONTH,dbo.tblServiceOrders.datereceived)
order by datepart(MONTH,dbo.tblServiceOrders.datereceived)