1

我想知道除了我目前正在做的方式之外,是否有一种更有效的方法可以从一年中的每个月中获取计数。目前,我正在使用单个 select 语句来获取 Jan、Mar 等的计数,然后将它们全部加入单个 select 语句中。

Select distinct
    count(item1 + item2) as 'Count of Items',
    month(sub_date) as 'month'

from table1
where month(sub_date)='1'
and year(sub_date)='2012'

我会从第 1 个月到第 12 个月重复一遍,然后加入 12 选择语句以获得类似这样的表格

jan feb mar apr may jun july aug sept oct nov dec
1   2   2   1   3   5   5    2    6   7   2   1

任何有关如何重做我的查询的信息将不胜感激。

4

2 回答 2

3

您应该能够GROUP BYmonth(sub_date)和上使用 a year(sub_date)

Select 
    count(item1 + item2) as 'Count of Items',
    month(sub_date) as 'month',
    year(sub_date) as year
from table1
group by month(sub_date), year(sub_date)

结果将在多行中。和GROUP BY都将允许您返回多年monthyear如果您只想返回 2012 年,那么您可以包含WHERE year(sub_date) =2012类似于此的原始条款:

Select 
    count(item1 + item2) as 'Count of Items',
    month(sub_date) as 'month'
from table1
where year(sub_date) = 2012
group by month(sub_date)

然后,如果您希望每一年的数据在一行中,那么您可以应用数据透视函数。

select *
from
(
    Select item1 + item2 Items,
        month(sub_date) as 'month'
    from table1
    where year(sub_date) =2012
) src
pivot
(
    sum(Items)
    for month in ([1], [2])
) piv

请参阅SQL Fiddle with Demo。该PIVOT函数将数据从行转换为列。

于 2013-03-25T15:00:37.780 回答
0

GROUP BY是你想要的:http: //msdn.microsoft.com/en-us/library/ms177673.aspx

SELECT MONTH(sub_date) AS [month],
       COUNT(item1 + item2) AS [Count of Items]
  FROM table1
 WHERE YEAR(sub_date) = 2012
 GROUP BY MONTH(sub_date)

正如我从您的帖子中推测的那样,这假设您只需要 12 行,一个用于给定年份的每个月(在本例中为 2012 年)。如果您想包括所有年份,那么您可以将其添加到您的GROUP BY子句中,如下所示:

 GROUP BY YEAR(sub_date), MONTH(sub_date)
于 2013-03-25T15:01:14.657 回答