通过sql实现动态行转列

上一章我们讲了固定行转列,本章我们就将一下怎么动态实现行转列的。因为有时候需要行专列的值有成千上万条,不可能再用固定行转列的方法,否则你一定会崩溃掉的。好了,废话不多说,开始吧!
常见一张表tmp_test,内容如下:

实现代码:
create or replace procedure p_test is
v_sql varchar2(2000);

cursor cursor_1 is
select distinct subject from tmp_test order by subject;

begin
v_sql := ‘select username‘;
for v_subject in cursor_1 loop
v_sql := v_sql || ‘,‘ ||‘sum(decode(subject,‘‘‘ ||v_subject.subject ||‘‘‘,source)) as ‘ ||v_subject.subject;
dbms_output.put_line(v_sql);
end loop;

v_sql := vql || ‘ from tmp_test group by username‘;
dbms_output.put_line(v_sql);

v_sql := ‘create or replace view test_result as ‘ || v_sql;

execute immediate v_sql;

end;
存储过程已经写好了,开始调用存过:
begin
p_test;
end;

查询视图test_result:
代码实现:
select * from test_result;
数据如下:

到这一步,动态行转列就已经实现了!希望对小伙伴有帮助!

原文地址:https://blog.51cto.com/12777507/2404745

时间: 2024-09-30 14:54:54

通过sql实现动态行转列的相关文章

SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段

一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL,动态列字段: 方法三:使用PIVOT关系运算符,静态列字段: 方法四:使用PIVOT关系运算符,动态列字段: 扩展阅读一:参数化表名.分组列.行转列字段.字段值: 扩展阅读二:在前面的基础上加入条件过滤: 参考文献(References) 二.背景(Contexts) 其实行转列并不是一个什么新鲜的

SQL server 动态行转列

在学习数据库的时候,遇到了怎么把数据表中的内容转变成数据表的字段,在此,记录一下自己对行转列的理解 比如有个学生成绩表: stuid:学号 course:科目 score:成绩 表的内容为: stuid course score 0101 语文     78 0101 数学     90 0101 英语     67 0101 物理     88 而我们想要的是类似下表: stuid 语文 数学 英语 物理 0101  78 90 67  88 这个时候就需要用到行转列,行转列有动态与静态之分:

SQL Server 动态行转列(轉載)

一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段; 方法二:使用拼接SQL,动态列字段; 方法三:使用PIVOT关系运算符,静态列字段; 方法四:使用PIVOT关系运算符,动态列字段; 二.背景(Contexts) 其实行转列并不是一个什么新鲜的话题了,甚至已经被大家说到烂了,网上的很多例子多多少少都有些问题,所以我希望能让大家快速的看到执行的效果,所以在动态列的基础上再把

代码实现SQL Server动态行转列,不用存储过程

分两步查询,第一步查询出动态列,第二步使用PIVOT函数. 代码: List<DataTable> dataTableList = new List<DataTable>(); #region 指标 DataTable dtEvaItemTitle = db.RunTable<Edu_EvaluationRecord>(string.Format(@" select distinct eva.id, eva.name from Edu_EvaluationRe

转:SQL Server 动态行转列

http://www.cnblogs.com/gaizai/p/3753296.html http://www.cnblogs.com/maanshancss/archive/2013/03/13/2957108.html

动态行转列 pivot实现

declare @sql varchar(8000)    begin              set @sql=''  --初始化变量@sql              select  @[email protected]+',['+ convert(varchar(10),CreateDate,120)+']' from  vwStationYield               where CreateDate > DATEADD(dd,-14,convert(varchar(10),g

动态行转列小记

数据库环境:SQL SERVER 2005 最近在整理数据时,要将查询到的数据张贴到Excel中.在Excel中,要展示的行数是固定的,列数不固定, 一个一个数据的复制张贴太烦人.想了一个偷懒的方法,直接将查询的数据进行行转列,达到和Excel中的效果一致, 再整列复制到Excel中. 1.创建测试表,导入测试数据 /*从系统表sysobjects取出name字段的42行数据,用作测试数据*/ WITH x0 AS ( SELECT TOP 42 name FROM sysobjects ),/

[MSSQL]采用pivot函数实现动态行转列

环境要求:2005+ 在日常需求中经常会有行转列的事情需求处理,如果不是动态的行,那么我们可以采取case when 罗列处理. 在sql 2005以前处理动态行或列的时候,通常采用拼接字符串的方法处理,在2005以后新增了pivot函数之后,我可以利用这样函数来处理. 1.动态SQL注入式判断函数 --既然是用到了动态SQL,就有一个老话题:SQL注入.建一个注入性字符的判断函数. CREATE FUNCTION [dbo].[fn_CheckSQLInjection] ( @Col nvar

Sql 语句收集——行转列

SQL行转列汇总 PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P 完整语法: table_source PIVOT( 聚合函数(value_column) FOR pivot_column IN(<column_list>) ) UNPIVOT用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现 完整语法: