行列转换 交叉表

转载 2007年09月26日 11:01: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

  

Microsoft公司 .CAB文件格式

 Microsoft公司 .CAB文件格式_Inside Windows Cabinet Files_Listing One// ===================================...
  • coolstar
  • coolstar
  • 2001-05-04 10:23:00
  • 2175

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

protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ...
  • smartsmile2012
  • smartsmile2012
  • 2012-11-22 09:51:54
  • 2530

ACCESS交叉表(行列互换)

用于创建交叉表查询?(交叉表查询:这种查询用于对记录计算总计、平均值、计数或其他类型总计,然后按照两类信息对结果进行分组:一组信息分布在数据表的左侧,另一组分布在数据表的顶端。)。 语法 TRAN...
  • yh0503
  • yh0503
  • 2014-06-19 11:18:25
  • 750

交叉查询经典

  • 2015年01月08日 09:21
  • 66KB
  • 下载

mysql交叉表,行列动态转换

http://blog.csdn.net/ACMAIN_CHM/article/details/4283943 create table aaa(  id int primary key, ...
  • merry163
  • merry163
  • 2014-04-04 17:51:41
  • 704

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

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

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

问题描述如下: 有张表cityorder,有如下几个列:id,amount,city,date。表中有以下一些记录: id amount city date 1 12 001 08-11-1...
  • heicm
  • heicm
  • 2011-03-17 15:36:00
  • 4673

带符号合并行列转换,合并多行结果到一列

/*有表tb,其数据如下:  a b  1 1  1 2  1 3  2 1  2 2  3 1如何转换成如下结果:  a b  1 1,2,3  2 1,2  3 1 */create table ...
  • ym8110
  • ym8110
  • 2008-02-27 15:19:00
  • 396

交叉表行列转换

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

sql行列转换 交叉表

例一:列转行drop table testcreate table test (name char(10),km char(10),cj int)goinsert test values(张三,语文,...
  • bjddd192
  • bjddd192
  • 2008-01-08 13:40:00
  • 869
收藏助手
不良信息举报
您举报文章:行列转换 交叉表
举报原因:
原因补充:

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