行列转换 交叉表

转换

总结了一些有代表性的贴子,具体见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

 

时间: 2025-01-01 16:46:16

行列转换 交叉表的相关文章

【转】SQL行列转换

原文地址:http://blog.csdn.net/kiki113/article/details/4105929   行列转换等经典SQL语句 1.--行列转换 原表:   姓名     科目   成绩            张三     语文    80            张三     数学    90            张三     物理    85            李四     语文    85            李四     物理    82            李

sql 行列转换

  行列转换实例 表ttt有三个字段 seq   --序列 jcxm --检查项目 zhi   --值 数据分别如下: seq jcxm       zhi -------       --------           -------- 11 1 0.50 11 2 0.21 11 3 0.25 12 1 0.24 12 2 0.30 12 3 0.22                              实现功能 创建视图时移动行值为列值 create view v_view1 as

在SQL Server 2005中实现表的行列转换

PIVOT和UNPIVOT关系运算符是SQL Server 2005提供的新增功能,因此,对升级到SQL Server 2005的数据库使用PIVOT和UNPIVOT时,数据库的兼容级别必须设置为90(可以使用sp_dbcmptlevel存储过程设置兼容级别). 在查询的FROM子句中使用PIVOT和UNPIVOT,可以对一个输入表值表达式执行某种操作,以获得另一种形式的表.PIVOT运算符将输入表的行旋转为列,并能同时对行执行聚合运算.而UNPIVOT运算符则执行与PIVOT运算符相反的操作,

[数据库] SQL查询语句表行列转换及一行数据转换成两列

本文主要讲述了SQL查询语句表之间的行列转换,同时也包括如何将一行数据转换成两列数据的方法.子查询的应用.decode函数的用法.希望文章对你有所帮助~ 1.创建数据库表及插入数据 2.子查询统计不同性质的学生总数 3.一行数据转换成两列数据 union all 4.表行列数据转换(表转置) 1.创建数据库表及插入数据 创建数据库.创建学生表并设置主键.插入数据代码如下: --创建数据库 create database StudentMS --使用数据库 use StudentMS --创建学生

表行列转换

问题描述 表转换前的样式产品ID号CPU内存显示卡1471.8nullnull150nullnullGF4TAI82000163双核1.9512MGF3TAI4000怎么转成下面这样的表.产品ID号147150163CPU1.8null双核1.9内存nullnull512M显示卡nullGF4TAI82000GF3TAI4000代码怎么写.急急急 解决方案 解决方案二:行列都是不固定的,动态的解决方案三:动态的关注解决方案四:我也想学解决方案五:/*普通行列转换(2007-11-18于海南三亚)

Mysql5 实现交叉表查询

交叉表.行列转换和交叉查询经典 一.什么是交叉表 "交叉表"对象是一个网格,用来根据指定的条件返回值.数据显示在压缩行和列中.这种格式易于比较数据并辨别其趋势.它由三个元素组成: 行 列 摘要字段 "交叉表"中的行沿水平方向延伸(从一侧到另一侧).在上面的示例中,"手套"(Gloves) 是一行. "交叉表"中的列沿垂直方向延伸(上下).在上面的示例中,"美国"(USA) 是一列. 汇总字段位于行和列的交叉

Oracle实现行列转换的方法分析_oracle

本文实例讲述了Oracle实现行列转换的方法.分享给大家供大家参考,具体如下: 1.固定列数的行列转换 如: student subject grade --------- ---------- -------- student1 语文 80 student1 数学 70 student1 英语 60 student2 语文 90 student2 数学 80 student2 英语 100 -- 转换为: 语文 数学 英语 student1 80 70 60 student2 90 80 10

行列转换

转换 1. 行列转换--普通 假设有张学生成绩表(CJ)如下 [姓名]  [学科]  [成绩]张三    语文    80 张三    数学    90 张三    物理    85 李四    语文    85 李四    数学    92 李四    物理    82王五    数学    60 想变成     [姓名] [语文] [数学] [物理]张三   80     90     85 李四   85     92     82王五   null   60     null decla

Oracle技术:使用分析函数进行行列转换

经常有朋友问到行列转换的问题,留言板上也有这样的提问. 其实使用分析函数进行处理是很好的方式,翻一下Tom的书,将其中的一个例子收录在这里. 比如查询scott.emp表的用户SAL排序信息,可以使用如下查询: SQL> SELECT deptno, ename, 2         ROW_NUMBER () OVER (PARTITION BY deptno ORDER BY sal DESC) seq 3    FROM emp; DEPTNO ENAME             SEQ