visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2012-08-08 : 11:32:08
|
[code]declare @test table(ID int,WARM int,HOT int,[STATUS] varchar(100),[DATE] date)insert @testVALUES(1, 10, 10, 'UP', '2012-07-10'),(2, 5, 3, 'DOWN', '2012-07-12'),(3, 2, 2, 'UP', '2012-07-15'),(4, 6, 1, 'UP', '2012-08-14'),(5, 0, 2, 'DOWN', '2012-08-10'),(6, 8, 0, 'DOWN', '2012-09-10'),(7, 1, 2, 'UP', '2012-10-10'),(8, 2, 2, 'UP', '2012-10-12');With Temp_ValuesAS(select [STATUS],MONTH([DATE]) AS MonthNo,LEFT(DATENAME(mm,[DATE]),3) AS MonthName,SUM(Val) AS TotalVal,CONDNfrom @testunpivot (Val FOR Condn IN ([WARM],[HOT]))uGROUP BY CONDN,[STATUS],MONTH([DATE]),DATENAME(mm,[DATE])UNION ALLSELECT 'TOTAL',MONTH([DATE]) AS MonthNo,LEFT(DATENAME(mm,[DATE]),3) AS MonthName,SUM(case when [status]='UP' then Val else -val end) AS TotalVal,'TOTAL'from @testunpivot (Val FOR Condn IN ([WARM],[HOT]))uGROUP BY MONTH([DATE]),DATENAME(mm,[DATE]))SELECT CONDN,STATUS,COALESCE(Jul,0) AS Jul,COALESCE(Aug,0) AS Aug,COALESCE(Sep,0) AS Sep,COALESCE(Oct,0) AS OctFROM(SELECT t.CONDN,CASE t.CONDNWHEN 'HOT' THEN 2WHEN 'WARM' THEN 1ELSE 3END AS CondnNo,t.STATUS,CASE t.STATUSWHEN 'DOWN' THEN 2WHEN 'UP' THEN 1ELSE 3END AS StatusNo,t.MonthName,t.TotalValFROM Temp_Values tUNION ALLSELECT 'NET',999,'NET',999,MonthName,SUM(TotalVal)+COALESCE(PrevTotal,0)FROM (SELECT DISTINCT MonthNo,MonthName,TotalVal,Status,CONDN FROM Temp_Values) tCROSS APPLY (SELECT SUM(TotalVal) AS PRevTotalFROM Temp_ValuesWHERE MonthNo <t.MonthNoAND CONDN='TOTAL')t1WHERE CONDN='Total'GROUP BY Monthname,PrevTotal)tPIVOT (SUM(TotalVal) FOR MONTHName IN ([Jul],[Aug],[Sep],[Oct]))pORDER BY CondnNo,StatusNooutput-----------------------------------------------------------------CONDN STATUS Jul Aug Sep OctWARM UP 12 6 0 3WARM DOWN 5 0 8 0HOT UP 12 1 0 4HOT DOWN 3 2 0 0TOTAL TOTAL 16 5 -8 7NET NET 16 21 13 20[/code]------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/ |
 |
|