Skip to content

Instantly share code, notes, and snippets.

@hskrishna29
Created March 6, 2017 19:30
Show Gist options
  • Save hskrishna29/8e004a37a57f72125a9c26ec8d9918c5 to your computer and use it in GitHub Desktop.
Save hskrishna29/8e004a37a57f72125a9c26ec8d9918c5 to your computer and use it in GitHub Desktop.
SQL Pivot on multiple aggregated columns
DROP TABLE TempFacts
CREATE TABLE TempFacts (
Model NVARCHAR(100)
,DATE DATETIME
,Engine NVARCHAR(100)
,Revenue DECIMAL(18, 6)
,Conversions DECIMAL(18, 6)
)
--insert data
insert into Tempfacts
values('F','2/22/2017','bing',1,2),('F','2/22/2017','facebook',2,3),('F','2/22/2017','google',3,4),
('L','2/22/2017','bing',32,12),('L','2/22/2017','facebook',34,16),('L','2/22/2017','google',5,9),
('W','2/22/2017','bing',5.6,1.5),('W','2/22/2017','facebook',100.4,30.9),('W','2/22/2017','google',23.8,4.9)
SELECT EngineType
,Sum(FConv) FConv
,Sum(LConv) LConv
,Sum(Wconv) Wconv
,Sum(FRev) FRev
,Sum(LRev) LRev
,Sum(WRev) WRev
,DATE
FROM (
SELECT *
FROM (
-- Aggregate whatever we need
SELECT DATE
,sum(Conversions) Conversions
,sum(Revenue) Revenue
-- The below aliases, will become columns after pivot
,CASE
WHEN Model = 'F'
THEN 'FConv'
WHEN Model = 'L'
THEN 'LConv'
WHEN Model = 'W'
THEN 'WConv'
END AS ConversionModelType
,CASE
WHEN Model = 'F'
THEN 'FRev'
WHEN Model = 'L'
THEN 'LRev'
WHEN Model = 'W'
THEN 'WRev'
END AS RevenueModelType
,CASE
WHEN Engine = 'bing'
THEN 'Bing'
WHEN engine = 'google'
THEN 'Google'
WHEN engine = 'facebook'
THEN 'Facebook'
END AS EngineType
FROM TempFacts
GROUP BY Model
,Engine
,DATE
) AS data
-- Put aggregated values for Conversions under FConv,WConv,LConv
pivot(sum(conversions) FOR ConversionModelType IN (
FConv
,LConv
,WConv
)) AS pvt
-- Put aggregated values for Revenue under FRev,WRev,LRev
pivot(sum(revenue) FOR RevenueModelType IN (
FRev
,LRev
,WRev
)) AS pvt2
) source
GROUP BY source.EngineType
,DATE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment