나는 (변수) 체크 포인트를 통과 할 때 사이클리스트를위한 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에서 집계 함수를 사용하면 날짜 시간으로 다시 변환해야하는 숫자 값을 얻을 수 있습니까? 확실히 여러 단계를 거치지 않고 datetime을 표시 할 수 있습니까?
무엇이 누락 되었습니까?
TIA. 나는 ... 문제는 관계 오류로 인해 발생되고 있었다 나의 논리 -
예상 출력을 추가하십시오 – 1000111