2012-09-25 43 views
3

我有一个数百行的数据表,今年有数百行。 (MS SqlServer 2k8)将SQL数据分成几个月

我想将此数据分解为客户查询/月。

我到目前为止是什么;

Select count(id) As Customers, DatePart(month, enquiryDate) as MonthTotal, productCode From customerEnquiries 
where enquiryDate > '2012-01-01 00:00:00' 
group by productCode, enquiryDate 

但是这会为每个数据项产生一行。 (虽然我想对每个数据项,每月一排。)

那么,如何更改上面的查询,以便不但得不到

1 1 10 
1 1 10 
1 1 11 
1 2 10 
1 2 10 

...

我得到

2 1 10 <-- 2 enquiries for product code 10 in month 1 
1 1 11 <-- 1 enquiries for product code 11 in month 1 
2 2 10 <-- 2 enquiries for product code 10 in month 2 
etc 

作为一个奖励的问题,是否有一个简单的方法来命名每个月,所以产出是一月,二月,三月而不是1,2,3月份列?

回答

5

试试这个

Select count(id) As Customers, DatePart(month, enquiryDate) as MonthTotal, productCode From customerEnquiries 
where enquiryDate > '2012-01-01 00:00:00' 
group by productCode, DatePart(month, enquiryDate) 

这可能会帮助你。

+0

谢谢,当我修改查询以获取更多数据时,它会回到1,1,1,1格式,但我会尝试了解为什么在我回来之前破坏并提出更多问题! – Matt

2

对于奖金,DATENAME(MONTH, enquiryDate)会给你本月的名字。

+0

非常感谢:) – Matt

+2

如果您的日期不是全部来自同一年,您可能需要在您的群组中添加'DatePart(年,....)' –

+1

这将始终返回'january'。如果您想要它工作,做'DATENAME(MONTH,enquiryDate)'。 –