SQL查询字段作为列

我真的不知道该如何放置,但请检查以下详细信息。

|Student_ID|Student_Name|

|1 |Ryan |

|2 |Camille |

|3 |George |

|Student_ID|Subject |Grade

|1 |Math |5

|1 |English |3

|1 |History |1

|2 |Math |3

|2 |English |4

|2 |History |1

|3 |Math |5

|3 |English |1

|3 |History |2

有可能得到这个结果吗?

Student_Name|Math|English|History

Ryan |5 |3 |1

Camille |3 |4 |1

George |5 |1 |2

现在,我一直在努力地做到这一点,首先用列名,然后是学生名,然后添加每个学生名的详细信息来填充未绑定的数据网格。这很耗时,我想更好地优化查询。

提前致谢。

回答:

虽然@John的答案在主题数已知的情况下有效,但是在主题数未知的情况下,您可以使用准备好的语句来动态生成该主题。这是一篇好文章:

动态数据透视表(将行转换为列)

您的代码如下所示:

SET @sql = NULL;

SELECT

GROUP_CONCAT(DISTINCT

CONCAT(

'MAX(case when Subject = ''',

Subject,

''' then Grade end) AS ',

Subject

)

) INTO @sql

FROM grade;

SET @sql = CONCAT('SELECT s.Student_name, ', @sql, '

FROM student s

LEFT JOIN grade AS g

ON s.student_id = g.student_id

GROUP BY s.Student_name');

PREPARE stmt FROM @sql;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

请参见带有演示的SQL Fiddle

以上是 SQL查询字段作为列 的全部内容, 来源链接: utcz.com/qa/416741.html

回到顶部