sql 行列转换
来源:互联网 发布:网络口语培训班 编辑:程序博客网 时间:2024/06/07 06:14
有如下表数据
id name course score
1 张三 语文 80
2 张三 数学 90
3 张三 英语 90
4 李四 语文 47
5 李四 数学 78
6 王五 数学 97
想要生成如下报表
name 数学 英语 语文
李四 78 NULL 47
王五 97 NULL NULL
张三 90 90 80
有如下方式
1. select S.name,
sum(case when course='语文' then score else null end) as 语文,
sum(case when course='数学' then score else null end) as 数学,
sum(case when course='英语' then score else null end) as 英语 from Score_Result S group by s.name
2. select S.name,
sum(case when course='语文' then score else null end) as 语文,
sum(case when course='数学' then score else null end) as 数学,
sum(case when course='英语' then score else null end) as 英语 from Score_Result S group by s.name
3.
USE [ScoreDB]
GO
/****** Object: StoredProcedure [dbo].[convert_row_column] Script Date: 06/10/2016 21:41:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[convert_row_column]
as
declare @course_count int
declare @sql varchar(1000)
declare @course_name varchar(20)
declare @index integer
set @course_count = (select COUNT(distinct course) from Score_Result)
set @index = 0
set @sql = 'select S.name '
while @index < @course_count
begin
if @index=0
begin
set @course_name = (select distinct top 1 course from Score_Result)
end
else
begin
set @course_name = (select distinct top 1 course from Score_Result S where S.course not in( select distinct top (@index) course from Score_Result))
end
set @sql = @sql + ', sum(case when course=''' + @course_name + ''' then score else null end) as ' + @course_name
set @index = @index + 1
end
set @sql = @sql + ' from Score_Result S group by s.name'
exec (@sql)
第三种的优势是即使增加了课程,也不必修改存储过程
- SQL进行行列转换
- SQL的行列转换
- sql 行列转换
- SQL 行列转换查询
- SQL 行列转换查询
- SQL行列转换实战
- SQL 行列转换
- SQL行列转换实战
- sql server 行列转换
- SQL行列转换
- sql server 行列转换
- 经典SQL----行列转换
- SQL Server 行列转换
- 经典SQL行列转换
- sql 行列转换
- SQL行列转换
- 行列转换的SQL
- SQL行列转换
- markdown编辑器使用
- Volley源码解析使用方式和使用场景分析
- 剑指offer(五十四)之字符流中第一个不重复的字符
- 正则表达式
- Codeforces Round #356 C. Bear and Prime 100
- sql 行列转换
- Android WebView问题汇总以及解决方法
- 解决Android解析图片的OOM问题!!!
- 存储过程、触发器和用户自定义函数实验2、触发器
- CPU概念和调度算法
- Solr的原子更新
- spoj GCDMAT
- PHP笔记9-day13
- 山东省第七届ACM省赛------The Binding of Isaac