老规矩,先弄一波测试数据,数据填充代码没有什么意义,先折叠起来:
/* 第一步:创建临时表结构 */ CREATE TABLE #Student --创建临时表 ( StuName nvarchar(20), --学生名称 Chinese int, Math int, English int ) DROP TABLE #Student --删除临时表 SELECT * FROM #Student --查询所有数据 INSERT INTO #Student(StuName,Chinese,Math,English) VALUES('张三',70,86,96); INSERT INTO #Student(StuName,Chinese,Math,English) VALUES('李四',49,85,86); INSERT INTO #Student(StuName,Chinese,Math,English) VALUES('王五',59,58,90); INSERT INTO #Student(StuName,Chinese,Math,English) VALUES('赵六',68,79,80);View Code
一:列转行,下面是转换之前与之后的截图对比
如果想要行转列,参考上一篇:Sql server 中将数据行转列列转行(一)
方法一:使用 UNION ALL 拼接多个结果集
SELECT * FROM ( SELECT StuName,课程='语文',分数=Chinese FROM #Student UNION ALL SELECT StuName,课程='数学',分数=Math FROM #Student UNION ALL SELECT StuName,课程='英语',分数=English FROM #Student )AS TE ORDER BY TE.StuName ASC
方法二: