sqlfiddleを使用して、テーブルのテキスト表現を一連の CREATE TABLE および INSERT INTO ステートメントに変換しました。
CREATE TABLE CenterCodes
(`id` int, `name` varchar(3), `center1` varchar(9), `center2` varchar(7), `center3` varchar(7))
;
INSERT INTO CenterCodes
(`id`, `name`, `center1`, `center2`, `center3`)
VALUES
(1, 'abc', 'baroda', 'bhopal', 'chennai'),
(2, 'pqr', 'amhedabad', 'Surat', 'kolkata'),
(3, 'nml', 'bhopal', 'chennai', 'Surat'),
(4, 'fts', 'baroda', 'Surat', 'Baroda')
;
次のクエリを試してください。内側UNION
は、文字列値ごとに複数の行を生成し、各セットの 3 つの列のうち 2 つが NULL です。これらの NULL はSUM()
、外側のクエリの集計によって削除され、行セットが文字列値ごとに 1 行に縮小されます。
SELECT
centername,
SUM(CASE WHEN centername = center1 THEN 1 ELSE 0 END) AS center1,
SUM(CASE WHEN centername = center2 THEN 1 ELSE 0 END) AS center2,
SUM(CASE WHEN centername = center3 THEN 1 ELSE 0 END) AS center3
FROM (
SELECT
center1 AS centername,
center1,
NULL AS center2,
NULL AS center3
FROM CenterCodes
UNION ALL
SELECT
center2 AS centername,
NULL AS center1,
center2,
NULL AS center3
FROM CenterCodes
UNION ALL
SELECT
center3 AS centername,
NULL AS center1,
NULL AS center2,
center3
FROM CenterCodes
) AS Centers
GROUP BY centername;