2017-08-18 21 views
0

私はこのクエリを使用して毎月の合計を計算しようとしています。グループ期待通りにグループ化しないでください。

SELECT 
    fld_year 
    , fld_month 
    , CONVERT(nvarchar(7), fld_ConsDate, 121) AS fld_ConsDate 
    , fld_ConsumptionValue 
    , fld_Id 
FROM (
    SELECT 
     YEAR(DATEADD(MINUTE, fld_TZAM - 6360, fld_ConsDateTime)) AS fld_year 
     , MONTH(DATEADD(MINUTE, fld_TZAM- 6360, fld_ConsDateTime)) AS fld_month 
     , DATEADD(MONTH, DATEDIFF(MONTH, 0, fld_ConsDateTime), 0) AS fld_ConsDate 
     , SUM(fld_EnergyTotalIndexValue) AS fld_ConsumptionValue 
     , MAX(fld_Id) AS fld_Id 
    FROM tbl_EM_DeviceEnergyHourlyConsumption 
    WHERE fld_Deleted = 0 
     AND fld_Active = 1 
     AND fld_CalculationState = 2 
     AND fld_DeviceId IN (18) 
     AND fld_ConsDateTime >= DATEADD(MINUTE, -1*(fld_TZAM) + 6360, '2017-05-01 00:00:00') 
     AND fld_ConsDateTime < DATEADD(MINUTE, -1*(fld_TZAM) + 6360, '2017-08-01 00:00:00') 
     AND fld_DeviceOrganizationId IN (SELECT Value FROM dbo.fn_OrganizationSubList(2)) 
    GROUP BY 
     YEAR(DATEADD(MINUTE, fld_TZAM - 6360, fld_ConsDateTime)), 
     MONTH(DATEADD(MINUTE, fld_TZAM - 6360, fld_ConsDateTime)), 
     DATEADD(MONTH, DATEDIFF(MONTH, 0, fld_ConsDateTime), 0), 
)T ORDER BY fld_ConsDate ASC 

私が期待した結果が

fld_year fld_month  fld_ConsDate  fld_ConsumptionValue fld_Id 
2017   5   2017-05    294.1340   
2017   6   2017-06    222.7527   
2017   7   2017-07    318.2111 

ですが、代わりに、私は毎月の2つの値

fld_year fld_month  fld_ConsDate  fld_ConsumptionValue fld_Id 
    2017   5   2017-05    260.2158   
    2017   6   2017-06    193.4958   
    2017   5   2017-06    33.9182 
    2017   6   2017-07    29.2569   
    2017   7   2017-07    264.8147   
    2017   7   2017-08    53.3964 

を取得し、私は私のための任意のヒントをそれを把握するように見えることはできませんか?私の論理がどこに間違っているのか誰にでも見せることができますか?前もって感謝します!

+0

あなたのクエリに個別の追加試すことができます**明確なfld_yearを選択** –

+0

'fld_ConstDate'日が含まれていますが、との結果でそれを切り捨てているのグループ化'CONVERT'式です。 'GROUP BY'の' CONVERT'式を使って、年と月だけをグループ化することができます。 –

答えて

2

月に1つの行だけが必要な場合は、なぜ3番目の集計キーを含めるのですか?このような何かあなたが望むものであるように見えるでしょう:

SELECT YEAR(DATEADD(MINUTE, fld_TZAM - 6360, fld_ConsDateTime)) AS fld_year, 
      MONTH(DATEADD(MINUTE, fld_TZAM - 6360, fld_ConsDateTime)) AS fld_month, 
      DATEADD(MONTH, DATEDIFF(MONTH, 0, MIN(fld_ConsDateTime)), 0) AS fld_ConsDate, 
      . . . 
    GROUP BY YEAR(DATEADD(MINUTE, fld_TZAM - 6360, fld_ConsDateTime)), 
      MONTH(DATEADD(MINUTE, fld_TZAM - 6360, fld_ConsDateTime)) 
関連する問題