Group at the month level and then crosstab the grouped results:select PREV_MONTH_COUNT = sum(case when PRIOR_MONTH_INDICATOR = 1 then MONTH_COUNT else 0 end), PREV_MONTH_AVG_ORDER_TOTAL = sum(case when PRIOR_MONTH_INDICATOR = 1 then MONTH_AVG_ORDER_TOTAL else 0 end), CURR_MONTH_COUNT = sum(case when PRIOR_MONTH_INDICATOR <> 1 then MONTH_COUNT else 0 end), CURR_MONTH_AVG_ORDER_TOTAL = sum(case when PRIOR_MONTH_INDICATOR <> 1 then MONTH_AVG_ORDER_TOTAL else 0 end)from ( select [START_OF_MONTH] = dateadd(mm,datediff(MM,0,orders.orderdate),0), PRIOR_MONTH_INDICATOR = max( case when -- First day of month for order dateadd(mm,datediff(MM,0,orders.orderdate),0) = -- First day of last month dateadd(mm,datediff(MM,0,getdate())-1,0) then 1 else 0 end), MONTH_COUNT = count(*), MONTH_AVG_ORDER_TOTAL = avg(orders.ordertotal) from orders where -- Select orders for current and prior month orders.orderdate >= dateadd(mm,datediff(MM,0,getdate())-1,0) group by -- Start of Month dateadd(mm,datediff(MM,0,orders.orderdate),0) ) a
CODO ERGO SUM