行列转换 交叉表

原创 2004年01月27日 21:06:00

总结了一些有代表性的贴子,具体见http://expert.csdn.net/Expert/topic/2440/2440306.xml?temp=.6941645

1: 列转为行:
eg1:
Create table test (name char(10),km char(10),cj int)
go
insert test values('张三','语文',80)
insert test values('张三','数学',86)
insert test values('张三','英语',75)
insert test values('李四','语文',78)
insert test values('李四','数学',85)
insert test values('李四','英语',78)

想变成

姓名   语文   数学   英语
张三   80     86     75
李四   78     85     78


declare @sql varchar(8000)
set @sql = 'select name'
select @sql = @sql + ',sum(case km when '''+km+''' then cj end) ['+km+']'
 from (select distinct km from test) as a
select @sql = @sql+' from test group by name'
exec(@sql)

drop table test

 

eg2:
有表A,
 id pid
 1   1
 1   2
 1   3
 2   1
 2   2
 3   1
如何化成表B:
 id pid
  1  1,2,3
  2  1,2
  3  1
或者是从表B变成A(不要用游标)
以前有相似的列子,现在找不到了,帮帮忙!


--1.创建一个合并的函数
create function fmerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+cast(pid as varchar) from 表A where id=@id
set @str=right(@str,len(@str)-1)
return(@str)
End
go

--调用自定义函数得到结果
select distinct id,dbo.fmerg(id) from 表A

2:
/***********     行转列   *****************/
测试:
create table t1 (a int,b int,c int,d int,e int,f int,g int,h int)
insert t1 values(15, 9, 1, 0, 1, 2, 2, 0)

declare @ varchar(8000)
set @=''
select @=@+rtrim(name)+' from t1 union all select ' from syscolumns where id=object_id('t1')
set @=left(@,len(@)-len(' from t1 union all select '))
--print @
exec('select '+@+' from t1')

a          
-----------
15
9
1
0
1
2
2
0

 

PostgreSQL 实现交叉表(行列转换)的五种方法

这里我来演示下在POSTGRESQL里面如何实现交叉表的展示,至于什么是交叉表,我就不多说了,度娘去哦。 原始表数据如下: [sql] view plaincopy ...
  • a258831020
  • a258831020
  • 2015年09月14日 21:00
  • 3114

交叉表、行列转换和交叉查询经典

交叉表、行列转换和交叉查询经典 一、什么是交叉表 “交叉表”对象是一个网格,用来根据指定的条件返回值。数据显示在压缩行和列中。这种格式易于比较数据并辨别其趋势。它由三个...
  • qq_26562641
  • qq_26562641
  • 2016年11月23日 09:44
  • 1344

水晶报表中几种交叉表的实现方法

水晶报表中几种交叉表的实现方法 交叉表,顾名思义,就是行和列交叉,用于将行上的数据,作为列指标来呈现。 用一个图直观的说明一下,就是将图1中的数据样式 最终呈现为如图2的效果 实际在使用中...
  • postfxj
  • postfxj
  • 2016年10月05日 09:39
  • 1073

交叉表行列转换

  • 2007年12月17日 23:02
  • 24KB
  • 下载

交叉表查询(普通行列转换)

问题:假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 李四 物理 94 想...
  • lgx040605112
  • lgx040605112
  • 2011年08月01日 09:33
  • 336

mysql交叉表,行列动态转换

工作内容 jbpm6 方向 2014-6-22 18:09 |个人分类:工作内容| jbpm 之前研究的jbpm6全是基于web的外壳,这是皮,可以进一步研究调用jbpm内核的api。 ...
  • merry163
  • merry163
  • 2014年08月22日 10:24
  • 369

PostgreSQL 实现交叉表(行列转换)的五种方法

这里我来演示下在POSTGRESQL里面如何实现交叉表的展示,至于什么是交叉表,我就不多说了,度娘去哦。 原始表数据如下: [sql] view plaincopy ...
  • a258831020
  • a258831020
  • 2015年09月14日 21:00
  • 3114

DataTable 行列转换 将原来的行表转化成交叉表,无对应值赋默认值,用于统计显示或报表

protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ...
  • smartsmile2012
  • smartsmile2012
  • 2012年11月22日 09:51
  • 2469

交叉表、行列转换和交叉查询经典

交叉表、行列转换和交叉查询经典 一、什么是交叉表 “交叉表”对象是一个网格,用来根据指定的条件返回值。数据显示在压缩行和列中。这种格式易于比较数据并辨别其趋势。它由三个...
  • qq_26562641
  • qq_26562641
  • 2016年11月23日 09:44
  • 1344

oracle 动态交叉查询 行列互换 oracle动态交叉表

问题描述如下: 有张表cityorder,有如下几个列:id,amount,city,date。表中有以下一些记录: id amount city date 1 12 001 08-11-1...
  • heicm
  • heicm
  • 2011年03月17日 15:36
  • 4368
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:行列转换 交叉表
举报原因:
原因补充:

(最多只允许输入30个字)