的分組由這是我的表Orders上的SQL一系列一年
如果我想有訂單的每個準確年份計,我簡直可以寫這個查詢
Select COUNT(*) CountOfOrders, Year(OrderDate) Year
From Orders
Group by YEAR(OrderDate)
所以具有該結果集
但是如果我需要這個結果集,該怎麼辦?
CoundOfOrder FromYear_toYear
5 2005-2010
4 2010-2015
的分組由這是我的表Orders上的SQL一系列一年
如果我想有訂單的每個準確年份計,我簡直可以寫這個查詢
Select COUNT(*) CountOfOrders, Year(OrderDate) Year
From Orders
Group by YEAR(OrderDate)
所以具有該結果集
但是如果我需要這個結果集,該怎麼辦?
CoundOfOrder FromYear_toYear
5 2005-2010
4 2010-2015
你可以試試這個查詢。這將以最簡單的方式幫助你。
SELECT COUNT(*),(CONVERT(VARCHAR,MIN(year(orderdate)))+'-' + CONVERT(VARCHAR,MAX(year(orderdate)))) AS yearRange
FROM orders
GROUP BY FLOOR(Year(OrderDate) /5)
你可以參考使用你的榜樣,形成此查詢的鏈接SQL_Fiddle_Link。
Select COUNT(*) CountOfOrders,
CASE WHEN Year(OrderDate) BETWEEN 2005 AND 2009 THEN '2005-2009'
WHEN Year(OrderDate) BETWEEN 2010 AND 2015 THEN '2010-2015'
END AS Year
From Orders
Group by
CASE WHEN Year(OrderDate) BETWEEN 2005 AND 2009 THEN '2005-2009'
WHEN Year(OrderDate) BETWEEN 2010 AND 2015 THEN '2010-2015'
END
請注意,我調整了您的日期範圍,否則你不會得到有意義的數據,在2類計數一些事情。
tombom;那麼,如果我們有大量的數據呢?有沒有動態的方法,而不是硬編碼?還有一點可能是用戶想要指定範圍。有時候5或2或其他。 –
您必須編寫一個過程,在該過程中您首先使用動態sql創建語句。但是因爲將多個日期範圍傳遞給一個過程可能很困難,所以我不會在數據庫層上執行它。 – fancyPants
你怎麼做期間之間的截止? 「2010-2015」不應該有5或6個(取決於如果你在這兩個時期計算2010年)? – jpw
根據您的示例數據和結果,無法確定2010計入的範圍。 –
@jpw:它可以是可選的。由2年,3年或5年。這取決於數據。如你所見,2011年沒有訂單。 –