SQL Server表列转行(宽表转长表)实现问题求助
解决SQL Server宽表转长表(逆旋转)的问题
嘿,我懂你现在的困扰——明明知道UNPIVOT(逆旋转)这个方法,但就是得不到符合预期的长表格式对吧?别慌,你需要把现有宽表的具体结构(列名、数据类型)和目标长表的期望格式明确出来,不过我先给你举个典型场景的示例,你可以对照着调整:
示例场景
假设你的现有宽表是存储学生多科目成绩的结构:
CREATE TABLE StudentScores ( StudentID INT, StudentName VARCHAR(50), MathScore INT, EnglishScore INT, ScienceScore INT );
你想要转换成的长表,是把每个科目拆成独立行,结构如下:
CREATE TABLE StudentScoreLong ( StudentID INT, StudentName VARCHAR(50), Subject VARCHAR(50), Score INT );
方法1:使用UNPIVOT
这是SQL Server原生的逆旋转语法,适合规整的列转换:
SELECT StudentID, StudentName, Subject, Score FROM StudentScores UNPIVOT ( -- 要提取的数值列 Score FOR Subject IN (MathScore, EnglishScore, ScienceScore) ) AS UnpivotResult;
方法2:使用UNION ALL(更灵活)
如果你的列名和目标值需要自定义映射,或者存在非规整的列结构,UNION ALL的灵活性更高:
SELECT StudentID, StudentName, 'Math' AS Subject, MathScore AS Score FROM StudentScores UNION ALL SELECT StudentID, StudentName, 'English' AS Subject, EnglishScore AS Score FROM StudentScores UNION ALL SELECT StudentID, StudentName, 'Science' AS Subject, ScienceScore AS Score FROM StudentScores ORDER BY StudentID, Subject;
你可以把你的实际表结构和目标格式补充出来,我再帮你写出精准适配的SQL语句!
内容的提问来源于stack exchange,提问作者zenzendaro
相关产品推荐
相关产品推荐

