I\'m trying to figure out how to write a query that counts values across multiple columns, with the result table having a count in each column for every possible value of an
Probably not the most efficient but this works.
;WITH data
AS
(
SELECT 'a' AS p1, 'b' AS p2, 'a' AS p3
UNION ALL
SELECT 'a', 'a','a'
UNION ALL
SELECT 'b','b','b'
UNION ALL
SELECT 'a','b','b'
)
SELECT
p_one.value AS header,
p1,
p2,
p3
FROM (SELECT
p1 AS value,
count(*) AS p1
FROM data d
GROUP BY p1) p_one
left JOIN (SELECT
p2 AS value,
count(*) AS p2
FROM data d
GROUP BY p2) p_two
ON p_two.value = p_one.value
left JOIN (SELECT
p3 AS value,
count(*) AS p3
FROM data d
GROUP BY p3) p_three
ON p_two.value = p_three.value