6

私は、確かに、非常に明白な何かに対して頭を打ち負かしています-

ストア内の各請求書の合計販売価格を合計し、月ごとに整理するように設計されたSQLコードが少しあります。

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

私が理解している限り、それは12月(12月)からのすべてのtotatlsellingpriceの合計を返すはずです。現在、このクエリは

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行あり、私には良いと思いますが(1年で12か月)、最後の行は130461です。

2番目の検索の行12が、最初の検索で行ったものと等しくない可能性はありますか?明らかな何かが欠けているような気がしますが、私は一生の間何を理解することができません。

ありとあらゆる助けをいただければ幸いです。

4

2 に答える 2

14

わかった:

MONTH列が含まれていないため、クエリは非常に混乱します。

これを行うと、クエリがMONTHで順序付けられていないことに気付くでしょう。したがって、MONTH12がクエリの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 に答える