首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL CrossTab结果

MySQL CrossTab结果
EN

Stack Overflow用户
提问于 2016-07-01 19:26:59
回答 0查看 60关注 0票数 0

寻找一些关于从MySQL query返回交叉表结果的帮助,我在过去使用过MS Access和透视表,它们工作得很好。我正在迁移到MySQL,并且需要获得相同的结果。我发现mysql pivot/crosstab query正是我想要实现的目标,但似乎在我的表中得到了错误。( SO示例中指向SQLFiddle的链接出错)

代码语言:javascript
复制
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;

模式:

代码语言:javascript
复制
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

更新:下面是返回的@sql和错误:@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

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38144277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档