SELECT
MAX(CASE WHEN day = 'понедельник' THEN name ELSE '' END) AS `понедельник`,
MAX(CASE WHEN day = 'вторник' THEN name ELSE '' END) AS `вторник`,
MAX(CASE WHEN day = 'среда' THEN name ELSE '' END) AS `среда`
FROM (
SELECT
@row_number:=CASE
WHEN @day_name = day THEN @row_number + 1
ELSE 1
END AS num,
@day_name:=day as day,
name
FROM
test
ORDER BY day, name
) t
GROUP BY num
这里我们解决两个问题。
首先,您应该
num在单独的列中为一周中的每一天的人员编号。其次,通过按列对记录进行分组来创建数据透视表
num。代码是这样的:
此解决方案适用于任何版本的 MySQL。对于 MySQL 8,它可以进行优化。
工作示例 - 在SQLFiddle