我想为骑自行车的人通过(可变)数量的检查点时创建一个mySQL表。我想显示前行中的结果,在左边的列(行标题)骑车者信息的表和检查站(列标题)MySQL交叉表
的基本架构:
CREATE TABLE timing (`Bib` int, `checkpoint` tinytext, `time` datetime);
INSERT INTO timing
(`Bib` , `checkpoint` , `time`)
VALUES
(100, 'CP1', '2016-09-22 01:00:00'),
(101, 'CP1', '2016-09-22 01:30:00'),
(102, 'CP1', '2016-09-22 02:00:00'),
(100, 'CP2', '2016-09-22 02:00:00'),
(101, 'CP2', '2016-09-22 02:30:00'),
(100, 'CP3', '2016-09-22 03:00:00'),
(103, 'CP2', '2016-09-22 04:00:00')
;
SQL :
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'(CASE WHEN checkpoint = ''',
checkpoint,
''' THEN time else 0 END) AS `',
checkpoint, '`'
)
) INTO @sql
FROM timing;
SET @sql
= CONCAT('SELECT Bib, ', @sql, '
from timing
group by Bib');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
结果是不填充整个表,即我只看到骑手第一次通过第一个检查点。如果我在CONCAT中使用聚合函数,我得到的数值必须转换回日期时间?当然,我可以只显示日期时间而无需多个步骤?
我缺少什么?
TIA。
请添加您的预期输出 – 1000111