主な問題は、現在のテーブルが非正規化されているため、列全体でカウントする必要があることです。これを行う 1 つの方法は、データを複数の列から複数の行にアンピボットすることです。
これを行うには、いくつかの方法があります。UNION ALL を使用して列を行に変換し、値をカウントできます。
select page, link, count(*) Total
from
(
select ClickLink1 as page, 'ClickLink1' as link
from yourtable
union all
select ClickLink2 as page, 'ClickLink2' as link
from yourtable
union all
select ClickLink3 as page, 'ClickLink3' as link
from yourtable
) d
where page = 'Landing'
group by page, link;
SQL Fiddle with Demoを参照してください。もう 1 つの方法は、仮想テーブルに CROSS JOIN を使用して値をカウントすることです。
SELECT page,
col as link,
COUNT(*) AS TOTAL
FROM
(
SELECT col,
CASE s.col
WHEN 'ClickLink1' THEN ClickLink1
WHEN 'ClickLink2' THEN ClickLink2
WHEN 'ClickLink3' THEN ClickLink3
END AS page
FROM yourtable
CROSS JOIN
(
SELECT 'ClickLink1' AS col UNION ALL
SELECT 'ClickLink2' UNION ALL
SELECT 'ClickLink3'
) s
) s
where page = 'Landing'
group by page, col;
SQL Fiddle with Demoを参照してください。使用しているデータベースによっては、集計とともに UNPIVOT 関数を使用して結果を取得できる場合があります。たとえば、SQL Server を使用している場合は、次を使用できます。
select page, link, count(*) Total
from yourtable
unpivot
(
page
for link in (ClickLink1, ClickLink2, ClickLink3)
) unpiv
where page = 'Landing'
group by page, link;
デモで SQL Fiddle を参照してください