SELECT TOP 1000000 City = 'City' + RIGHT('00'+ CAST(ABS(CHECKSUM(NEWID()))%100+1 AS VARCHAR(10)),3), Delivery_Type = (SELECT CASE N WHEN 0 THEN 'Standard' WHEN 1 THEN '2 Day' ELSE 'OverNight' END FROM (SELECT N = ABS(CHECKSUM(NEWID()))%3)d), Date_Delivered = DATEADD(dd,ABS(CHECKSUM(NEWID()))%DATEDIFF(dd,'Jan 2010','Mar 2013'),'Jan 2010') INTO #TestData FROM master.sys.all_columns ac1 CROSS JOIN master.sys.all_columns ac2;
WITHctePreAgg AS( --=== Preaggregate the data for an improvement in performance SELECT Year = DATEPART(yy,Date_Delivered), Month = DATEPART(mm,Date_Delivered), City, Deliver = Delivery_Type, MonthCount = COUNT(*) FROM #TestData--dbo.YourTable --<---<<<< LOOK! You'll need to change this!GROUP BY DATEPART(yy,Date_Delivered),DATEPART(mm,Date_Delivered),City,Delivery_Type) --=== Now, pivot the data using a high performance crosstab. SELECT City, Year, Deliver, [Jan] = SUM(CASE WHEN Month = 1 THEN MonthCount ELSE 0 END), [Feb] = SUM(CASE WHEN Month = 2 THEN MonthCount ELSE 0 END), [Mar] = SUM(CASE WHEN Month = 3 THEN MonthCount ELSE 0 END), [Apr] = SUM(CASE WHEN Month = 4 THEN MonthCount ELSE 0 END), [May] = SUM(CASE WHEN Month = 5 THEN MonthCount ELSE 0 END), [Jun] = SUM(CASE WHEN Month = 6 THEN MonthCount ELSE 0 END), [Jul] = SUM(CASE WHEN Month = 7 THEN MonthCount ELSE 0 END), [Aug] = SUM(CASE WHEN Month = 8 THEN MonthCount ELSE 0 END), [Sep] = SUM(CASE WHEN Month = 9 THEN MonthCount ELSE 0 END), [Oct] = SUM(CASE WHEN Month = 10 THEN MonthCount ELSE 0 END), [Nov] = SUM(CASE WHEN Month = 11 THEN MonthCount ELSE 0 END), [Dec] = SUM(CASE WHEN Month = 12 THEN MonthCount ELSE 0 END), [YearTotal] = SUM(MonthCount) FROM ctePreAgg GROUP BY City, Year, Deliver ORDER BY City, Year, Deliver;
SELECT City,Delivery_type,[Jan],[Feb],[Mar],[Apr],[May],[Jun],[Jul],[Aug],[Sep],[Oct],[Nov],[Dec]FROM( SELECT City,Delivery_type,Date_Del = CONVERT(CHAR(3),Date_Delivered,107)FROM #TestData)PVTPIVOT(COUNT(DATE_DEL)FOR DATE_DEL IN ([Jan],[Feb],[Mar],[Apr],[May],[Jun],[Jul],[Aug],[Sep],[Oct],[Nov],[Dec]))AS PRT
IF OBJECT_ID('TempDB..#Results') IS NOT NULLDROP TABLE #ResultsCREATE TABLE #Results (District VARCHAR(50), Location varchar(50), [Q1] INT,[Q2] INT, [Q3] INT,[Q4] INT)insert into #Results select District, Location,[Q1],[Q2],[Q3],[Q4] from ( SELECT SUB_DISTRICT, LOCATION_TYPE, Q = DATEPART(QUARTER, REGISTERED_DATE) FROM Tata.dbo.Tbl_results_tabdel WHERE (TB_RESULT_TYPE IN (N'DIRECT', N'DIRECTP', N'CULAUR')) ) SRCPivot (count(Q)for Q in ([Q1],[Q2],[Q3],[Q4]) ) as PVTSELECT * FROM #Results