转换MySQL查询的结果

转换MySQL查询的结果,mysql,sql,transpose,Mysql,Sql,Transpose,我想将MySQL查询的结果从每行key=>value resultset转换为resultset,其中key是列标题,value是该列的行条目 i、 e.鉴于以下数据: |------------------+-------------| | CLASS_LESSON | ATTENDANTS | |------------------+-------------| | class1art | 1 | | class1history | 1

我想将MySQL查询的结果从每行key=>value resultset转换为resultset,其中key是列标题,value是该列的行条目

i、 e.鉴于以下数据:

|------------------+-------------|
|  CLASS_LESSON    | ATTENDANTS  |
|------------------+-------------|
|  class1art       | 1           |
|  class1history   | 1           |
|  class2geography | 2           |
|------------------+-------------|
我想把它转换成

|------------+---------------+------------------|
|  class1art | class1history | class2geography  |
|------------+---------------+------------------|
|  1         | 1             | 2                |
|------------+---------------+------------------|
假设类/课对是动态的;可以随时添加或删除它们。我不想按照解决方案中的建议显式地调用它们

select 
  MAX(CASE WHEN class_lesson = 'class1art' THEN attendants ELSE 0 END) AS class1art,
  MAX(CASE WHEN class_lesson = 'class1history' THEN attendants ELSE 0 END) AS class1history,
  MAX(CASE WHEN class_lesson = 'class2geography' THEN attendants ELSE 0 END) AS class2geography,
  MAX(CASE WHEN class_lesson = 'class7art' THEN attendants ELSE 0 END) AS class7art,
  MAX(CASE WHEN class_lesson = 'class7history' THEN attendants ELSE 0 END) AS class7history

from
    (select 
        group_concat(distinct class, lesson) as class_lesson,
            count(*) as attendants
    from
        TableName
    group by class , lesson
    ) a
下面是一个包含示例数据的环境。 在不使用存储过程的情况下是否可以执行此操作?

请尝试此操作

SELECT  
MAX(CASE WHEN t.CLASS_LESSON = 'class1art' THEN t.ATTENDANTS ELSE NULL END) AS class1art,
MAX(CASE WHEN t.CLASS_LESSON = 'class1history' THEN t.ATTENDANTS ELSE NULL END) AS class1history,
MAX(CASE WHEN t.CLASS_LESSON = 'class2geography' THEN t.ATTENDANTS ELSE NULL END) AS class2geography
FROM 
(
 select 
 group_concat(distinct class, lesson) as class_lesson, count(*) as attendants

 from 
 TableName

 group by 
 class, lesson
) as t

试试这个,为什么你想要2级地理的1,它应该是2

SELECT  
MAX(CASE WHEN t.clsubject = 'class1art' THEN t.attndee ELSE NULL END) AS class1art,
MAX(CASE WHEN t.clsubject = 'class1history' THEN t.attndee ELSE NULL END) AS class1history,
MAX(CASE WHEN t.clsubject = 'class2geography' THEN t.attndee ELSE NULL END) AS class2geography
FROM 
(
SELECT CONCAT(class,lesson) AS clsubject, COUNT(*) AS attndee FROM TableName GROUP BY clsubject 
) t 

>“为什么你想要1作为class2geography它应该是2”:对不起,这是一个排版。修复了我无法理解为什么选择此答案的问题,因为它给出了@Lmwangi所说的并非所需的解决方案。