2010-01-18 149 views
0

SQL Server 2008再次。我有一個主鍵pt_id和日期時間列order_dts爲每個ID。我想從1996年到2008年每年計算一次密鑰的數量,並返回8次結果 - 每年計數一次。對於一個單一的一年SQL Server 2008:計算多個日期範圍中的鍵數

SELECT COUNT pm.pt_id AS '1996' 
FROM dm.medications pm 
WHERE (pm.order_dts BETWEEN '1/1/1996' and '12/31/1996') 

的作品,但我我該怎麼辦所有的年,而不必做一些可笑的像八個不同的查詢?

謝謝!

回答

5
SELECT COUNT(*), Year(pm.order_dts) as Year 
FROM dm.medications pm 
WHERE Year(pm.order_dts) between 1996 AND 2008 
group by Year(pm.order_dts) 

如果你想這一切在一排,你可以這樣做:

SELECT 
    sum(case when Year(pm.order_dts) = 1996 then 1 end) as Count1996, 
    sum(case when Year(pm.order_dts) = 1997 then 1 end) as Count1997, 
    sum(case when Year(pm.order_dts) = 1998 then 1 end) as Count1998, 
    sum(case when Year(pm.order_dts) = 1999 then 1 end) as Count1999, 
    sum(case when Year(pm.order_dts) = 2000 then 1 end) as Count2000, 
    sum(case when Year(pm.order_dts) = 2001 then 1 end) as Count2001, 
    sum(case when Year(pm.order_dts) = 2002 then 1 end) as Count2002, 
    sum(case when Year(pm.order_dts) = 2003 then 1 end) as Count2003, 
    sum(case when Year(pm.order_dts) = 2004 then 1 end) as Count2004, 
    sum(case when Year(pm.order_dts) = 2005 then 1 end) as Count2005, 
    sum(case when Year(pm.order_dts) = 2006 then 1 end) as Count2006, 
    sum(case when Year(pm.order_dts) = 2007 then 1 end) as Count2007, 
    sum(case when Year(pm.order_dts) = 2008 then 1 end) as Count2008 
FROM dm.medications pm 
+0

@OrbMan:我已經添加了條件限制的記錄爲每年的標準。 – shahkalpesh 2010-01-18 16:57:03

+0

我總是忘記YEAR功能。 – Joe 2010-01-18 16:58:46

+0

@shahkalpesh:謝謝! – RedFilter 2010-01-18 17:01:25

0
select count(pm.pt_id) as count, datepart(yy, pm.order_dts) as year 
from dm.medications pm 
WHERE (pm.order_dts BETWEEN '1/1/1996' and '12/31/1996') 
group by datepart(yy, pm.order_dts)