Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用动态MYSQL PIVOT将多行数据转换为单行多列_Mysql - Fatal编程技术网

使用动态MYSQL PIVOT将多行数据转换为单行多列

使用动态MYSQL PIVOT将多行数据转换为单行多列,mysql,Mysql,这个问题与一直在搜索的问题不同,它在创建透视表之前从多个列中进行选择 我有一个与此类似的表结构 CREATE TABLE score ( id int, reg_id varchar(5), test1 int(5), exam int(5), subject int(5), term VARCHAR(5) ) CREATE TABLE subject ( id int, subject_name varchar(5) ) 我希望能够选择多个值,例如test1和ex

这个问题与一直在搜索的问题不同,它在创建透视表之前从多个列中进行选择 我有一个与此类似的表结构

CREATE TABLE score (
id int,
reg_id varchar(5),
test1 int(5),
exam int(5),
subject int(5),
term VARCHAR(5)
)


CREATE TABLE subject (
    id int,
    subject_name varchar(5)
    )
我希望能够选择多个值,例如test1和examin到动态MYSQL数据透视表中的不同列中 我见过类似的例子,但他们似乎只在动态数据透视表中选择了1个匹配值。我试过写这样的东西

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(case when subject = ''',
      subject,
      ''' then test1 end)AS `',
      (select subject_name from subject where id=subject), '`',

        'SUM(case when subject = ''',
      subject,
      ''' then exam end)AS `',
      (select subject_name from subject where id=subject), '`'
    )
  ) INTO @sql
FROM
  scores;
SET @sql = CONCAT('SELECT reg_id, ', @sql, ' 
                  FROM scores  where term="First term"
                   GROUP BY reg_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
但它不起作用,谢谢

我希望在转换后得到类似的输出

regid-------maths test----maths exam-----english test------english exam
3m ---------    10    -----   23     ----     12         ------- 59        

请您将样本数据添加为文本,并添加主题表定义和样本。请将样本数据添加为文本,并添加主题表定义和样本。