DROP TABLE IF EXISTS #test;
CREATE table #test
(
name varchar(100) null,
qtr int null,
Contact_percentage int,
building_percentage int,
insurance_percentage int,
medical_percentage int );
insert into #test (name,qtr,contact_percentage,building_percentage,insurance_percentage,medical_percentage)
VALUES ('JANE', 1, 23,56,65,34)
, ('JANE', 2, 45,56,34,76)
, ('JANE', 3, 32,67,54,87)
, ('JANE', 4, 78,63,35,26)
, ('JOHN', 1, 53,54,87,19)
, ('JOHN', 2, 96,79,70,71)
, ('JOHN', 3, 61,68,14,91)
, ('JOHN', 4, 9,54,87,65);
WITH cp AS
(
SELECT NAME
, 'contact_percentage' SELECTION
, [1] AS QTR1
, [2] AS QTR2
, [3] AS QTR3
, [4] AS QTR4
FROM #test
PIVOT (Max(Contact_percentage) FOR qtr IN([1], [2], [3], [4])) P ),
bp AS
(
SELECT NAME
, 'building_percentage' SELECTION
, [1] AS QTR1
, [2] AS QTR2
, [3] AS QTR3
, [4] AS QTR4
FROM #test
PIVOT (Max(building_percentage) FOR qtr IN([1], [2], [3], [4])) P),
[ip] AS
(
SELECT NAME
, 'insurance_percentage' SELECTION
, [1] AS QTR1
, [2] AS QTR2
, [3] AS QTR3
, [4] AS QTR4
FROM #test
PIVOT (Max(insurance_percentage) FOR qtr IN([1], [2], [3], [4])) P),
mp AS
(
SELECT NAME
, 'medical_percentage' SELECTION
, [1] AS QTR1
, [2] AS QTR2
, [3] AS QTR3
, [4] AS QTR4
FROM #test
PIVOT (Max(medical_percentage) FOR qtr IN([1], [2], [3], [4])) P)
SELECT NAME, SELECTION
, Cast(SUM(QTR1) AS varchar(10))+'%' AS QTR1
, Cast(SUM(QTR2) AS varchar(10))+'%' AS QTR2
, Cast(SUM(QTR3) AS varchar(10))+'%' AS QTR3
, Cast(SUM(QTR4) AS varchar(10))+'%' AS QTR4
FROM cp
GROUP BY name, selection
UNION
SELECT name, SELECTION
, Cast(SUM(QTR1) AS varchar(10))+'%' AS QTR1
, Cast(SUM(QTR2) AS varchar(10))+'%' AS QTR2
, Cast(SUM(QTR3) AS varchar(10))+'%' AS QTR3
, Cast(SUM(QTR4) AS varchar(10))+'%' AS QTR4
FROM bp
GROUP BY name, selection
UNION
SELECT name, SELECTION
, Cast(SUM(QTR1) AS varchar(10))+'%' AS QTR1
, Cast(SUM(QTR2) AS varchar(10))+'%' AS QTR2
, Cast(SUM(QTR3) AS varchar(10))+'%' AS QTR3
, Cast(SUM(QTR4) AS varchar(10))+'%' AS QTR4
FROM [ip]
GROUP BY name, selection
UNION
SELECT name, SELECTION
, Cast(SUM(QTR1) AS varchar(10))+'%' AS QTR1
, Cast(SUM(QTR2) AS varchar(10))+'%' AS QTR2
, Cast(SUM(QTR3) AS varchar(10))+'%' AS QTR3
, Cast(SUM(QTR4) AS varchar(10))+'%' AS QTR4
FROM mp
GROUP BY name, selection;
DROP TABLE #test;