SQL Server把行转成多列

在SQL Server中,有时候我们需要将一行数据按照特定的条件转换成多列的形式,这在数据处理和报表展示中非常常见。本文将介绍如何使用SQL语句将行转换成多列,并提供代码示例。

原始数据

假设我们有如下的原始数据表student_scores

student_id subject score
1 English 80
1 Math 90
2 English 85
2 Math 95

我们的目标是将每个学生的成绩按科目转换成多列,如下所示:

student_id English Math
1 80 90
2 85 95

SQL查询语句

我们可以使用CASE语句和GROUP BY语句来实现这个转换:

SELECT 
    student_id,
    MAX(CASE WHEN subject = 'English' THEN score END) AS English,
    MAX(CASE WHEN subject = 'Math' THEN score END) AS Math
FROM student_scores
GROUP BY student_id;

在这个查询语句中,我们通过CASE语句判断每个学生的成绩属于哪个科目,并使用MAX函数将不同科目的成绩转换成对应的列。最后通过GROUP BY语句将结果按照学生ID分组。

完整示例

CREATE TABLE student_scores (
    student_id INT,
    subject VARCHAR(50),
    score INT
);

INSERT INTO student_scores VALUES
(1, 'English', 80),
(1, 'Math', 90),
(2, 'English', 85),
(2, 'Math', 95);

SELECT 
    student_id,
    MAX(CASE WHEN subject = 'English' THEN score END) AS English,
    MAX(CASE WHEN subject = 'Math' THEN score END) AS Math
FROM student_scores
GROUP BY student_id;

状态图

stateDiagram
    [*] --> Query
    Query --> Display

结论

通过以上的示例,我们学会了如何在SQL Server中将行转换成多列的方法。这种技巧在数据处理和报表展示中非常有用,能够提高数据的可读性和分析效率。希望本文对您有所帮助!