2017-03-17 17 views
-1

次のセットアップ:SQL SUMおよびGROUP BY(MS SQL)

PredDate     WtSumLoc 
2017-02-16 00:00:00.000  1360.139000 
2017-02-16 00:00:00.000  399.444000 
2017-02-28 00:00:00.000  400.000000 
2017-02-28 00:00:00.000  8231.046000 
2017-02-28 00:00:00.000  400.000000 
2017-03-01 00:00:00.000  1118.055000 
2017-04-15 00:00:00.000  400.000000 
2017-04-15 00:00:00.000  2488.699000 
2017-04-28 00:00:00.000  1555.556000 
2017-04-28 00:00:00.000  1555.252000 
2017-06-30 00:00:00.000  432.704000 

私は合計しようとすると、グループこの表で行うことによって:

SELECT 

MONTH(PredDate) 'Month', 
sum(WtSumLoc) as 'sum' 

FROM Table 

GROUP BY PredDate 
ORDER BY Month 

と私は、次の結果が得られます。

Month sum 
2  1759.583000 
2  9031.046000 
3  1118.055000 
4  2888.699000 
4  40.000000 
4  3110.808000 
6  432.704000 

なぜグループ化されていないのですか?この40.000はどこから来ますか?

select "Month", sum(WtSumLoc) as 'sum' 
from 
(
    SELECT MONTH(PredDate) 'Month', WtSumLoc 
    FROM Table 
) dt 
GROUP BY "Month" 
ORDER BY Month 

ANSI SQLは、識別子を区切るために二重引用符を使用して、例えば:

答えて

0

別々の日付をグループ化しているため、これらの日付の月が出力されるため、同じ月に2つの異なる日付が表示されるため、2つの異なるレコードが表示されます。あなたは

SELECT 

MONTH(PredDate) 'Month', 
sum(WtSumLoc) as 'sum' 

FROM Table 

GROUP BY MONTH(PredDate) 
ORDER BY Month 
0

ANSI SQL準拠したソリューションは、その結果派生テーブルに月の抽出部分をラップすることであり、GROUP BY"Month"。 SQL Serverでは、角括弧もサポートされています([Month]など)。単一引用符は文字列リテラルのためのものです。

0
SELECT 

MONTH(PredDate) 'Month', 
sum(WtSumLoc) as 'sum' 

FROM Table 

GROUP BY MONTH(PredDate) 
ORDER BY Month 

のようなものにあなたのクエリを変更する必要が

必要がありますまた、月ごとにグループを(PredDate)