Hello,
Please find an example sql below. Hope it helps.
-- Drop table if it already exists
IF (OBJECT_ID('tempdb..#tmpOrders') IS NOT NULL)
BEGIN
DROP TABLE #tmpOrders ;
END ;
-- Create temp table to hold orders
CREATE TABLE #tmpOrders
(
OrderNo INT IDENTITY (1, 1) NOT NULL
, OrderQuantity INT NOT NULL
, OrderDate DATE NOT NULL
) ;
-- Insert orders
INSERT INTO #tmpOrders
SELECT o.OrderQuantity
, o.OrderDate
FROM (
VALUES ('100', '2014-03-01')
, ('200', '2014-03-10')
, ('200', '2014-03-09')
, ('300', '2014-03-08')
, ('300', '2014-03-02')
, ('300', '2014-03-07')
, ('400', '2013-03-10')
, ('500', '2013-03-10')
, ('700', '2013-02-10')
, ('800', '2013-01-10')
) o(OrderQuantity, OrderDate)
ORDER BY o.OrderDate ;
-- Select orders
-- SELECT * FROM #tmpOrders ;
-- Set 'Sunday' as the first day of the week (SELECT @@DATEFIRST ;)
SET DATEFIRST 7 ;
-- Select the Windowed data
SELECT *
FROM #tmpOrders o
CROSS APPLY (
SELECT CAST(YEAR(o.OrderDate) AS CHAR(4)) + CAST(DATEPART(WEEK, o.OrderDate) AS VARCHAR(2))
) xWindow(WindowingValue) ;
-- Select the order counts
SELECT Window = xwindow.WindowingValue
, OrderCount = COUNT(*)
FROM #tmpOrders o
CROSS APPLY (
SELECT CAST(YEAR(o.OrderDate) AS CHAR(4)) + CAST(DATEPART(WEEK, o.OrderDate) AS VARCHAR(2))
) xWindow(WindowingValue)
GROUP BY xwindow.WindowingValue ;
-- Cleanup
IF (OBJECT_ID('tempdb..#tmpOrders') IS NOT NULL)
BEGIN
DROP TABLE #tmpOrders ;
END ;
GO