镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 1 base code use master drop database helloworld --创建一个数据库 create database helloworld --用helloworld1这个数据库 use helloworld --创建一个表格teacher create table
/* 在实际使用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)
#创建表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
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 Server 2000的人都知道,要想实现行列转换,必须综合利用聚合函数和动态SQL,具体实现起来需要一定的技巧,而在SQL Server 2005中,使用新引进的关键字PIVOT/UNPIVOT,则可以很容易的实现行列转换的需求. 在本文中我们将通过两个简单的例子详细讲解PIVOT和UNPIVOT的用法. PIVOT是行转列,用法如下: 假如表结构如下: id name quarter profile 1 a 1 10
表名: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; 结果:
现有数据如下: 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
将横表转为竖表,基本思想是: 1)将横表的多条数据,"压"成一条.相当于将这么多条分组,每组"压"成一条数据.利用group by 2) 再对竖表中的列,由特定行的数据填充,利用case when 'a' then 'b' else 没有用的值 end,为了过滤一些没有用的数据,常用的函数有max(), sum() ps:如果没有聚合函数帅选.数据库会把第一个数据返回给你,基本就是刚刚你填写"没有用的值" 下面是例子: END ) 语文, END