2013-03-25 68 views
1

我想知道是否有一個更有效的方法來從一年中的每個月獲得一個計數,除非我現在正在做的方式。目前,我使用單個select語句從1月,3月等計算,然後將它們全部加入到單個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 select語句得到的東西的表像這樣

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

上如何去重做我的查詢將任何信息讚賞。

回答

3

您應該能夠使用上都month(sub_date)year(sub_date)一個GROUP BY

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 DemoPIVOT函數將數據從行轉換爲列。

+1

的OP只希望它爲一年,如可以在選擇列表中可以看出。另外,GROUP BY不使用AND分隔字段。 – siride 2013-03-25 15:02:06

+0

@siride我意識到這一點,我展示瞭如何在'month'和'year'上使用'GROUP BY'來實現這一點。 – Taryn 2013-03-25 15:08:30

+0

這看起來很正確,我會仔細研究它是否確實我想要的是。謝謝! – user2146212 2013-03-25 15:15:05

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) 
+0

我希望每個月都有一個列,這就是爲什麼我目前正在加入每個月的單個select語句。 – user2146212 2013-03-25 15:09:35

相關問題