MySQLクエリからクロスタブの結果を返すための小さな助けを探して、私は過去にMS AccessとPivotのテーブルを正常に動作させました。私はMySQLに移行しており、同じ結果を得る必要があります。私はmysql pivot/crosstab queryが私が達成しようとしているものですが、私のテーブルにエラーがあるようです。 (アウトSO例のエラーでSQLFiddleへのリンク)MySQL CrossTabの結果
SET SESSION group_concat_max_len = 10000;
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
' GROUP_CONCAT((CASE Class_Name when ', CHAR(39),
ClassName, CHAR(39),
' then ', CHAR(39), DateCompleted, CHAR(39), ' else NULL END)) AS Completed',
ClassName
)
) INTO @sql
FROM EnrollmentsTbl;
スキーマ:
ここSET NAMES 'UTF8';
CREATE TABLE `EnrollmentsTbl` (
`AutoNum` INTEGER PRIMARY KEY,
`UserName` VARCHAR(50),
`SubmitTime` DATETIME,
`ClassName` VARCHAR(50),
`ClassDate` DATETIME,
`ClassTime` VARCHAR(50),
`Enrolled` BOOLEAN,
`WaitListed` BOOLEAN,
`Instructor` VARCHAR(50),
`DateCompleted` DATETIME,
`Completed` BOOLEAN,
`EnrollmentsMisc` VARCHAR(50),
`Walkin` BOOLEAN
) CHARACTER SET 'UTF8';
INSERT INTO `EnrollmentsTbl`(`AutoNum`,`UserName`,`SubmitTime`,`ClassName`,`ClassDate`, `ClassTime`,`Enrolled`,`WaitListed`,`Instructor`,`DateCompleted`,`Completed`,`EnrollmentsMisc`,`Walkin`)
VALUES(1,'John',NULL,'MDC (Intro)','2004-06-27 00:00:00',NULL,TRUE,FALSE,'Phil','2004-06-27 00:00:00',TRUE,NULL,FALSE),
(2,'Bob',NULL,'MDC (Intro)','2004-06-27 00:00:00',NULL,TRUE,FALSE,'Phil','2004-06-27 00:00:00',TRUE,NULL,FALSE),
(3,'Robert',NULL,'MDC (Intro)','2004-06-27 00:00:00',NULL,TRUE,FALSE,'Phil','2004-06-27 00:00:00',TRUE,NULL,FALSE),
(4,'John','2010-08-04 06:11:10','HIPAA(Employee)','2010-08-04 00:00:00','6:12 AM',TRUE,FALSE,'On-line','2010-08-04 06:11:10',TRUE,NULL,FALSE),
(5,'Debbie',NULL,'MDC (Intro)','2003-04-19 14:53:55',NULL,TRUE,FALSE,'devore','2003-04-19 14:53:55',TRUE,NULL,FALSE),
(6,'Jeff',NULL,'MDC (Intro)','2003-03-29 14:26:23',NULL,TRUE,FALSE,'','2003-03-29 14:26:23',TRUE,NULL,FALSE),
(7,'Tom',NULL,'Firehouse (Incident)','2004-07-13 00:00:00',NULL,TRUE,FALSE,'Shannon','2004-07-13 00:00:00',TRUE,NULL,FALSE),
(8,'Rhonda',NULL,'Firehouse (Incident)','2004-07-13 00:00:00',NULL,TRUE,FALSE,'arobe','2004-07-13 00:00:00',TRUE,NULL,FALSE),
(9,'Jeff',NULL,'Firehouse (Incident)','2004-07-13 00:00:00',NULL,TRUE,FALSE,'arobe','2004-07-13 00:00:00',TRUE,NULL,FALSE),
(10,'Patrick',NULL,'Firehouse (Incident)','2004-07-13 00:00:00',NULL,TRUE,FALSE,'arobe','2004-07-13 00:00:00',TRUE,NULL,FALSE),
(11,'Donnie',NULL,'Firehouse (Incident)','2004-07-10 00:00:00',NULL,TRUE,FALSE,'feiertag','2004-07-10 00:00:00',TRUE,NULL,FALSE),
(12,'Andy',NULL,'Firehouse (EMS)','2004-07-10 00:00:00',NULL,TRUE,FALSE,'feiertag','2004-07-10 00:00:00',TRUE,NULL,FALSE),
(13,'Brian',NULL,'Firehouse (Incident)','2004-07-17 00:00:00',NULL,TRUE,FALSE,'Paul','2004-07-17 00:00:00',TRUE,NULL,FALSE),
(14,'Jane',NULL,'Firehouse (EMS)','2004-07-17 00:00:00',NULL,TRUE,FALSE,'Paul','2004-07-17 00:00:00',TRUE,NULL,FALSE),
(15,'Richard',NULL,'Firehouse (EMS)','2004-07-17 00:00:00',NULL,TRUE,FALSE,'Paul','2004-07-17 00:00:00',TRUE,NULL,FALSE),
(16,'Dale',NULL,'Firehouse (EMS)','2004-07-17 00:00:00',NULL,TRUE,FALSE,'Paul','2004-07-17 00:00:00',TRUE,NULL,FALSE),
(17,'Stinky','2016-06-29 17:17:19','FireApp (Assessment Only)','2016-07-18 00:00:00','1830',TRUE,FALSE,NULL,NULL,FALSE,NULL,FALSE),
(18,'Janet','2016-06-30 14:02:05','MDC (On-Line)','2016-06-30 00:00:00','2:02 PM',TRUE,FALSE,'On-line','2016-06-30 14:02:05',TRUE,NULL,FALSE);
失敗した私のSQLFiddle例です。http://sqlfiddle.com/#!9/0c4c2/3
UPDATE:ここ が返さ@sqlでは、とエラー: @SELECT AutoNum, UserName, GROUP_CONCAT((CASE Class_Name when 'MDC (Intro)' then '2004-06-27 00:00:00'else NULL END)) AS CompletedMDC (Intro), GROUP_CONCAT((CASE Class_Name when 'HIPAA (Employee)' then '2010-08-04 06:11:10'else NULL END)) AS CompletedHIPAA (Employee), GROUP_CONCAT((CASE Class_Name when 'MDC (Intro)' then '2003-04-19 14:53:55'else NULL END)) AS CompletedMDC (Intro), GROUP_CONCAT((CASE Class_Name when 'MDC (Intro)' then '2003-03-29 14:26:23'else NULL END)) AS CompletedMDC (Intro), GROUP_CONCAT((CASE Class_Name when 'Firehouse (Incident)' then '2004-07-13 00:00:00'else NULL END)) AS CompletedFirehouse (Incident), GROUP_CONCAT((CASE Class_Name when 'MDC (On-Line)' then '2016-06-30 14:02:05'else NULL END)) AS CompletedMDC (On-Line) FROM enrollmentstbl GROUP BY AutoNum, UserName
Record Count: 1; Execution Time: 1ms View Execution Plan link You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(Intro), GROUP_CONCAT((CASE Class_Name when 'HIPAA (Employee)' then '2010-08-04 ' at line 1
SQLFiddleがヒットするか見逃しているようです。私はあなたの修正をphpMyAdminで実行し、次のエラーが発生しました:MySQLは言った: #1064 - SQL構文に誤りがあります。 'GROUP_CONCAT((' CASE Class_Name 'MDC(Intro)'、次にDateCompleted else NULL EN 'が1行目のときに使用する正しい構文についてはMySQLサーバのバージョンに対応するマニュアルをチェックしてください。 – BarclayVision
準備コマンドの前に@sqlをエコーすることで、一連のクエリによって生成されたSQL文全体をコピーします.Sqlコマンド全体を見ることなく、何が間違っているのかは分かりません。クラス名は二重引用符で囲みます。 – Shadow
まだ取得中:#1064 - SQL構文に誤りがあります。 'GROUP_CONCAT(' GROUP_CONCAT((CASE Class_Name、 '、' 2行目の場合 - 準備コマンドの前に@sqlをエコーすることがわからない場合) – BarclayVision