sqlr列转行问题汇解

create table ta
(
   Name    varchar(10) ,
   Subject varchar(10) ,
   Result  int
)

insert into ta(Name , Subject , Result) values(‘张三‘ , ‘语文‘ , 74)
insert into ta(Name , Subject , Result) values(‘张三‘ , ‘数学‘ , 83)
insert into ta(Name , Subject , Result) values(‘张三‘ , ‘物理‘ , 93)
insert into ta(Name , Subject , Result) values(‘李四‘ , ‘语文‘ , 74)
insert into ta(Name , Subject , Result) values(‘李四‘ , ‘数学‘ , 84)
insert into ta(Name , Subject , Result) values(‘李四‘ , ‘物理‘ , 94)
go

select * from ta

--静态SQL,指subject只有语文、数学、物理这三门课程。
select Name 姓名,
  max(case Subject when ‘语文‘ then Result else 0 end) 语文,
  max(case Subject when ‘数学‘ then Result else 0 end) 数学,
  max(case Subject when ‘物理‘ then Result else 0 end) 物理
from ta
group by Name

--动态SQL,指subject不止语文、数学、物理这三门课程。
declare @sql varchar(8000)
set @sql = ‘select Name as ‘ + ‘姓名‘
select @sql = @sql + ‘ , max(case Subject when ‘‘‘ + Subject + ‘‘‘ then Result else 0 end) [‘ + Subject + ‘]‘
from (select distinct Subject from ta) as a
set @sql = @sql + ‘ from ta group by Name‘
exec(@sql)
时间: 2024-10-12 12:27:12

sqlr列转行问题汇解的相关文章

Oracle中的列转行例子详解

数据如下:name id张三 1,2,3 要求实现:name id张三 1张三 2张三 3 --创建临时表 create table tmp as(select '张三' name, '1,2,3' id from dual); --写法1 select name,regexp_substr(id,'[^,]+',1,level) as id from tmp connect by level <= regexp_count(id,',')+1 order by id --写法2: select

数据库 行转列 列转行详解

目录结构如下: 行转列 列转行 [一].行转列 1.1.初始测试数据 表结构:TEST_TB_GRADE create table TEST_TB_GRADE ( ID        NUMBER(10) not null, USER_NAME VARCHAR2(20 CHAR), COURSE    VARCHAR2(20 CHAR), SCORE     FLOAT ) [sql] view plaincopy create table TEST_TB_GRADE ( ID        N

Mysql中行转列和列转行

一.行转列 即将原本同一列下多行的不同内容作为多个字段,输出对应内容. 建表语句 DROP TABLE IF EXISTS tb_score; CREATE TABLE tb_score(    id INT(11) NOT NULL auto_increment,    userid VARCHAR(20) NOT NULL COMMENT '用户id',    subject VARCHAR(20) COMMENT '科目',    score DOUBLE COMMENT '成绩',   

hive列转行 (collect_set())

一.问题 hive如何将 a       b       1 a       b       2 a       b       3 c       d       4 c       d       5 c       d       6 变为: a       b       1,2,3 c       d       4,5,6 二.数据 test.txt a       b       1 a       b       2 a       b       3 c       d    

行转列、列转行

一:行转列 模式:N行转一列  本实验N取31.建表SQL> create table grade(id int,name varchar2(10),subject varchar2(10),grade number(3));2.插入实验数据insert into grade values(1,'Andy','Yuwen',11);insert into grade values(2,'Andy','Math',22);insert into grade values(3,'Andy','Eng

Oracle行转列、列转行的Sql语句总结(转)

多行转字符串 这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_userselect id||username str from app_user 字符串转多列 实际上就是拆分字符串的问题,可以使用 substr.instr.regexp_substr函数方式 字符串转多行 使用union all函数等方式 wm_concat函数 首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以",&quo

SQLServer处理行转列和列转行

掌握SQL Server 行转列和列转行 1.列转行 数据经过计算加工后会直接生成前端图表需要的数据源,但是程序里又需要把该数据经过列转行写入中间表中,下次再查询该数据时直接从中间表查询数据. 1.1 列换行语法 table_source UNPIVOT( value_column FOR pivot_column IN(<column_list>) ) 1.2  行转列案例 WITH T AS ( SELECT 1 as TeamId,'测试团队1' as Team,80 'MEN',20

做图表统计你需要掌握SQL Server 行转列和列转行

说在前面 做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需要用到行转列和列转行. 1.列转行 数据经过计算加工后会直接生成前端图表需要的数据源,但是程序里又需要把该数据经过列转行写入中间表中,下次再查询该数据时直接从中间表查询数据. 1.1 列换行语法 table_source UNPIVOT( value_column FOR pivot_column IN(<column_list>) ) 1.2  行转列案例

内存数据库中列转行的应用,h2中列转行,hsqldb中列转行

其实列转行是比较简单的用sum和decode函数就可以了,但是我遇到的项目,不知道数据谁设计的居然字段里面还设计成long类型,此long类型与java中的不同,oracle中的long是指可变长二进制数据,最长2G,哎没办法只好转换了. 以下是hsqldb的转换,用到了转换函数convert,可以将long类型的转换为double类型,其中d.value是long类型,status是int类型,所以value需要转换 SELECT P.NAME,P.ID, SUM(DECODE(D.K_NAM