2014-10-27 43 views
0

我有問題將以下查詢分組爲每月總計。 表格與表格交叉連接以提取速度,並且內部與另一個包含僅包含日期的表格進行交叉連接,以顯示錶格中不存在數據的日期的空值(客戶端請求) 對於下面的日常分組,它可以正常工作。請如何每月進行分組。每月加入分組

Select * from(select [Letter_Date] [Date],Council 
SUM([Total_Corr])*[Rate][Total] 
FROM Correspondence 
cross join 
Input_Variable_Price 
where [Revenue_Name] = 'Correspondence' 
group by [Letter_Date],Council)AS ED 

RIGHT JOIN 
(Select '21'[No],b_date,[Revenue_Name][Report],[Unit],[Rate] 
From Blank_dates 
cross join 
Input_Variable_Price 
where [Revenue_Name] = 'Correspondence') AS BD 
ON ED.Date = BD.[b_date] 

乾杯

+0

'GROUP BY'從您的日期/時間戳中提取月份? – 2014-10-27 15:25:52

+0

它不起作用。這就是我得到的結果:列'ED.Date'在選擇列表中是無效的,因爲它不包含在聚合函數或GROUP BY子句中。不知道還有什麼要做。 – Nugeswale 2014-10-27 16:12:43

回答

1

我會使用以下方法:添加你需要的SELECT,不管在您需要的GROUP BY項目的任何其他聚合。

Select DATEADD(month, DATEDIFF(month, 0, [Date]), 0) AS StartOfMonth, SUM(Total) 
from 
    (
    select [Letter_Date] [Date],Council, 
     SUM([Total_Corr])*[Rate] [Total] 
    FROM 
     Correspondence 
     cross join 
     Input_Variable_Price 
    where [Revenue_Name] = 'Correspondence' 
    group by [Letter_Date],Council 
)AS ED 

RIGHT JOIN 
    (
    Select 
     '21'[No], 
     b_date, 
     [Revenue_Name][Report], 
     [Unit], 
     [Rate] 
    From 
     Blank_dates 
     cross join 
     Input_Variable_Price 
    where [Revenue_Name] = 'Correspondence' 
) AS BD ON 
    ED.Date = BD.[b_date] 
GROUP BY DATEADD(month, DATEDIFF(month, 0, [Date]), 0) 
+0

如果您需要以不同的方式格式化月份的名稱,則可以使用[此問題的答案](http://stackoverflow.com/questions/185520/convert-month-number-to-month-name-function-in- sql)獲取月份的名稱,然後連接年份(將年份轉換爲varchar後)。 – AHiggins 2014-10-27 15:28:24

+0

即使在將月份更改爲月份([日期])後,它也只能給出當前月份的結果。還有我需要它來顯示查詢中的費率,報告等..乾杯 – Nugeswale 2014-10-27 16:18:04

+0

好吧,你爲什麼將它更改爲'MONTH([Date])'並且之前它工作?如果您在查詢中需要額外的字段,請將它們添加到SELECT和GROUP BY子句中......我不知道您的聚合和分組意圖是什麼,因此您必須自己完成這一部分。 – AHiggins 2014-10-27 16:29:15