Ну, просто чтобы успокоить сомневающихся. Обратите внимание, что я не серьезно выступает как решение, потому что это просто не очень масштабируемым - и делает его масштабируемым (с помощью подготовленных заявлений и sproc, откровенно говоря, утомительно) ...
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id INT NOT NULL PRIMARY KEY
,name VARCHAR(12) NOT NULL
);
INSERT INTO my_table VALUES
(1 ,'test'),
(2 ,'test1'),
(3 ,'test'),
(4 ,'test1'),
(5 ,'test2');
SELECT MAX(CASE WHEN name = 'test' THEN id END) 'test'
, MAX(CASE WHEN name = 'test1' THEN id END) 'test1'
, MAX(CASE WHEN name = 'test2' THEN id END) 'test2'
FROM
(SELECT x.*
, COUNT(*) rank
FROM my_table x
JOIN my_table y
ON y.name = x.name
AND y.id <= x.id
GROUP
BY id
) z GROUP BY rank;
+------+-------+-------+
| test | test1 | test2 |
+------+-------+-------+
| 1 | 2 | 5 |
| 3 | 4 | NULL |
+------+-------+-------+
Если кто-то есть проблемы, выясняя это, он хочет, чтобы 'name1' был идентификатором столбца, где' name' является 'test',' name2' является 'name == test1' и' name3' является 'name == test2'. – h2ooooooo
@Mosty Mostacho Я думаю, что ваш комментарий, имеющий некоторые действительные баллы, вы можете прояснить ситуацию? –
Рассмотрите возможность обработки проблем отображения данных в коде уровня представления/уровне приложения. – Strawberry