/* 在实际使用sql工作中总会碰到将某一列的值放到标题中显示.就是总说的行列转换或者互换. 比如有如下数据: ID NAME KECHENG CHENGJI -- ---------- -------------------- ------- 1 a 语文 80 2 a 数学 70 3 b 语文 40 4 b 数学 100 5 c 语文 90 6 c 数学 92 那末我要求显示的结果是: NAME YUWEN SHUXUE ---------- ---------------------- -
竖表转横表 竖表结构: Name Course Grade 张三 语文 75 张三 数学 80 张三 英语 90 李四 语文 95 李四 数学 55 转换后横表结构: Name 语文 数学 英语 张三 75 80 90 李四 95 55 0 SQL语句: select Name, end) as 语文, end) as 数学, end) as 英语 from TableA group by Name 竖表转横表 横表转竖表 横表结构: ID Name Chinese Math English 1
1.纵表转横表: 纵表结构:Table1 转换后的横表结构: Sql示例代码: select username, sum(case Course when '语文' then Grade else 0 end) as 语文, sum(case Course when '数学' then Grade else 0 end) as 数学, sum(case Course when '英语' then Grade else 0 end) as 英语 from Table1 group by usern
纵表格式如图所示: 查询sql语句如下: ),content)content,Date from SummerChina ' 变成横表如图所示: 纵表变横表sql语句如下: select Time, max(case Date when 'Morning' then content else null end) as Morning, max(case Date when 'Afternoon' then content else null end)as Afternoon ),content)
1,纵表转横表 纵表结构 Table_A: 转换后的结构: 纵表转横表的SQL示例: SELECT Name , SUM(CASE WHEN Course = N'语文' THEN Grade ELSE 0 END) AS Chinese , SUM(CASE WHEN Course = N'数学' THEN Grade ELSE 0 END) AS Math
1.数据准备 create table Vertical( Id int , ProjectName varchar(20), ProjectValue int ) insert into Vertical values (101,'旅游',100)insert into Vertical values (101,'牧业',101)insert into Vertical values (101,'工业',102)insert into Vertical values
现有数据如下: Sql: select a.MODELID, max( case a.PNAME when'计划开始' then a.PVALUE end) as RStart, max( case a.PNAME when '计划结束' then a.PVALUE end) as Rend from TB_CONSTRUCTION_PROPERTY as a group by a.MODELID 结果:
) set @sql='select t3.BID,t5.UnitName,Sort,UnitTypeSort' select @sql=@sql+' , max(case t4.id when '''+ ID +''' then t3.Num else 0 end) ['+ Name +']' ') as a set @sql=@sql+' from DS_HZ_ResourceType t3 inner join Per_Dictionary t4 on t3.RID=t4.id left
表名:sales SELECT NAME, sum( CASE MONTH WHEN '一月份' THEN money ELSE END ) AS '一月份', sum( CASE MONTH WHEN '二月份' THEN money ELSE END ) AS '二月份', sum( CASE MONTH WHEN '三月份' THEN money ELSE END ) AS '三月份' FROM sales GROUP BY NAME; 结果:
#创建表user_score create table user_score ( name varchar(20), subjects varchar(20), score int ); insert into user_score(name,subjects,score) values('张三','语文',60); insert into user_score(name,subjects,score) values('张三','数学',70); insert into user_score(n
回表 简单来说就是数据库根据索引找到了指定的记录所在行后,还需要根据rowid再次到数据块里取数据的操作. "回表"一般就是指执行计划里显示的"TABLE ACCESS BY INDEX ROWID". 例如select的字段里有索引不包含的列 根据tom的oracle编程艺术,建表big_table,300W数据. 建索引: create index idx_big_table_created on big_table(created); 下面语句不会回表,因为只
使用过SQL Server 2000的人都知道,要想实现行列转换,必须综合利用聚合函数和动态SQL,具体实现起来需要一定的技巧,而在SQL Server 2005中,使用新引进的关键字PIVOT/UNPIVOT,则可以很容易的实现行列转换的需求. 在本文中我们将通过两个简单的例子详细讲解PIVOT和UNPIVOT的用法. PIVOT是行转列,用法如下: 假如表结构如下: id name quarter profile 1 a 1 10
oracle表结构和表内容差异比对 oracle中有三种集合操作,他们会把左边和右边的select 结果集进行集合操作. union 并集 intersect 交集 minus 差集 假设有如下两张表 STUDENT_A 和 STUDENT_B create table STUDENT_A ( id ) not null, name ), age NUMBER, sex ) ); insert into STUDENT_A (id, name, age, sex) , '); insert in
Mysql 创建表之前判断表是否存在,如果存在则删除已有表 DROP TABLE IF EXISTS sys_area; CREATE TABLE sys_area ( id int NOT NULL AUTO_INCREMENT COMMENT '编号', parent_id varchar(64) NOT NULL COMMENT '父级编号', parent_ids varchar(2000) NOT NULL COMMENT '所有父级编号', name varchar(100) NOT