从mysql中的单个表中获取列作为行

从mysql中的单个表中获取列作为行,mysql,pivot,Mysql,Pivot,我有一个如下表,我需要将主题行作为列,将出勤作为行 sid name subject attendance 1 jhon sub1 1 2 toni sub1 0 3 danial sub1 1 4 jafer sub1 1 5 jhon sub2 1 6 toni sub2 1 7 danial sub2 1 8 jafer sub2 0 根据我的要求,我需要得到如下表所

我有一个如下表,我需要将
主题
行作为列,将
出勤
作为行

sid name    subject attendance
1   jhon    sub1    1
2   toni    sub1    0
3   danial  sub1    1
4   jafer   sub1    1
5   jhon    sub2    1
6   toni    sub2    1
7   danial  sub2    1
8   jafer   sub2    0
根据我的要求,我需要得到如下表所示的输出:

name    sub1    sub2
jhon    1       1
toni    0       1
danial  1       1
jafer   1       0
我不擅长用mysql编写查询。
提前感谢您的帮助

您可以使用以下技术来实现这一点,请注意,只有当您知道案例中的总变化时,它才起作用,如果您需要在查询中添加它们或生成完整的动态查询,那么它只是
sub1
sub2

select 
name,
max(case when subject='sub1' then attendance end ) as 'sub1',
max(case when subject='sub2' then attendance end ) as 'sub2'
from test 
group by name

要使其动态化有点复杂,请在谷歌上搜索mysql动态数据透视,您将获得一些教程来了解它的工作原理

对于你的情况,你可以像下面这样-

set @d_sql = null;
select
  group_concat(distinct
    concat(
      'max(case when subject = ''',
      subject,
      ''' then attendance else null end) as ',
      concat('`',subject, '`')
    )
  ) into @d_sql
from test;

set @d_sql = concat('SELECT  name,', @d_sql, ' from test group by name');

PREPARE stmt from @d_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

您可以使用以下技术来实现这一点,请注意,只有当您知道案例中的总变化时,它才起作用,如果您需要在查询中添加更多的变化或生成完整的动态查询,那么它只需
sub1
sub2

select 
name,
max(case when subject='sub1' then attendance end ) as 'sub1',
max(case when subject='sub2' then attendance end ) as 'sub2'
from test 
group by name

要使其动态化有点复杂,请在谷歌上搜索mysql动态数据透视,您将获得一些教程来了解它的工作原理

对于你的情况,你可以像下面这样-

set @d_sql = null;
select
  group_concat(distinct
    concat(
      'max(case when subject = ''',
      subject,
      ''' then attendance else null end) as ',
      concat('`',subject, '`')
    )
  ) into @d_sql
from test;

set @d_sql = concat('SELECT  name,', @d_sql, ' from test group by name');

PREPARE stmt from @d_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

你用什么语言玩它?PHP?这些主题中有多少是可能的?只有2个吗?在主题中,假设它是一个动态的主题。在写查询之前,我不知道主题。它可能是2个主题或更多,这取决于部门,我不知道主题名称。每次我在这个问题的主题中明确指定时,它都会有所不同。我需要用“MYSQL”编写查询,你用什么语言来处理它?PHP?这些主题中有多少是可能的?只有2个吗?在主题中,假设它是一个动态的主题。在写查询之前,我不知道主题。它可能是2个主题或更多,这取决于部门,我不知道主题名称。每次我在这个问题的主题中明确指定时,它都会有所不同。我需要在“MYSQL”中编写查询请假设主题名称是动态的我们在编写查询之前不知道主题名称谢谢请假设主题名称是动态的我们在编写查询之前不知道主题名称谢谢