数据库的行列转换
A. 数据库行列互换的代码
一个关于学科和分数的行列互换
行列互换
select id as 学号,max(case Stusu when '数学' then StuMarks end) as '数学',
max(case Stusu when '语文' then StuMarks end) as '语文',
max(case Stusu when '英语' then StuMarks end) as '英语',
Sum(StuMarks) as '总成绩'
from Stu group by id
B. sql行列转换
1> create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
2> Insert tb
3> Select '张三','语文',60 union all
4> Select '张三','数学',70 union all
5> Select '张三','英语',80 union all
6> Select '张三','物理',90 union all
7> Select '李四','语文',65 union all
8> Select '李四','数学',75 union all
9> Select '李四','英语',85 union all
10> Select '李四','物理',95
11> go
(8 行受影响)
1>
2> SELECT
3> *
4> FROM
5> tb
6> PIVOT(
7> SUM([分数])
8> FOR [课程] IN ([语文],[数学] )
9> ) tmp
10> go
姓名 语文 数学
---------- ----------- -----------
李四 65 75
张三 60 70
(2 行受影响)
好像没有办法,课程名字必须写在 SQL 里面。
FOR [课程] IN ([语文],[数学] )
C. sql 数据库行列转换
我提供一个思路,用游标一个个取数 + 动态拼接sql
declare @c1 varchar(50)
declare @c2 varchar(50)
declare @STR varchar(8000)
set @STR='select ''转成一行'' '
DECLARE cs CURSOR --一行行取c1,c2存入变量 @c1,@c2
for select c1,c2 from TABLE1 --TABLE1 即为原表
open cs
fetch next from cs into @c1,@c2
while @@FETCH_STATUS =0
begin
set @STR = @STR + ','+@c1+' , '+@c2+''
end
set @STR = @STR + ‘ into TABLE2 ’
exec(@STR) --执行拼接的sql
Select * from TABLE2 --Table2中即为所需要的转成一行的结果
这台电脑上没有装sql server。。这是用文本编辑出来的,可能运行时会报些错,调整下应该就可以了
D. Oracle数据库行列转换
举个例子给你:
SELECT id,
MAX(decode(cn, 'c1', cv, NULL)) AS c1,
MAX(decode(cn, 'c2', cv, NULL)) AS c2,
MAX(decode(cn, 'c3', cv, NULL)) AS c3
FROM t_row_col
GROUP BY id
ORDER BY 1;
MAX聚集函数也可以用sum、min、avg等其他聚集函数替代。
看有没有启发
E. sql数据库把一列数据转换成一行数据
这是一个典型的 行列转换问题。这些数据应该有着统一的一列吧,例如:标识人员的身份证号码之类的。方法别人博客中都很详尽,我就不在此罗列了。 可检索关键字 “SQL 行列转换”或者看下面链接
http://www.cnblogs.com/zhangzt/archive/2010/07/29/1787825.html
http://hi..com/wrgcxfcoybinpur/item/90f388e2ec0f853286d9decc
F. SQL数据库中表行列转换显示
只有新创建一张表。CREATE TABLE t_row_col AS
SELECT id, 'c1' cn, c1 cv
FROM t_col_row
UNION ALL
SELECT id, 'c2' cn, c2 cv
FROM t_col_row
UNION ALL
SELECT id, 'c3' cn, c3 cv FROM t_col_row;
SELECT * FROM t_row_col ORDER BY 1,2;
G. 数据库表行列转换
使用case when语句可以使用行转列功能
H. SQL2008数据库操作进行行列转换
我觉得当你需要行列转换的时候,有可能是数据模型不合理了。
需要考虑考虑是否应该把数据模型修改一下,
将一行多字段的表形式直接变成多行的表形式。
I. SQL行列转置
declare @sql varchar(8000)
declare @date varchar(20)
declare @bmbh varchar(20)
declare @ckbh varchar(20)
set @date='20110101'
set @bmbh='500103'
set @ckbh='0601'set @sql = 'select max(lsbmzd_bmmc) as bmmc,kcrkd2_wlbh as wlbh,max(lswlzd_wlmc) as wlmc,max(lswlzd_ggxh) as ggxh ,sum(kcrkd2_sssl) as sum'
select @sql = @sql + ', max(case kcrkd1_kcywrq when ''' + kcrkd1_kcywrq + ''' then kcrkd2_sssl else 0 end) [' + kcrkd1_kcywrq + ']'
from (select distinct kcrkd1_kcywrq from kcrkd1
where kcrkd1_kcywrq>= substring(convert(varchar(100),dateadd(mm,-1,Convert(DateTime,@date)),112),1,6)+'26'
and kcrkd1_kcywrq<=substring(@date,1,6)+'25') as a
set @sql = @sql + ' from kcrkd1,kcrkd2,lswlzd,lsbmzd
where kcrkd1_lsbh=kcrkd2_lsbh and kcrkd1_pjlx=''j'' and kcrkd1_ckbh='''+@ckbh+''' and kcrkd1_bmbh=lsbmzd_bmbh and kcrkd2_wlbh=lswlzd_wlbh and kcrkd1_bmbh='''+@bmbh+'''
group by kcrkd2_wlbh'
exec(@sql)
J. 写sql,怎么将查询结果的行列转换呀
有意思的问题 给出一个参考的URL: 假设你表是这样的结构部件 入库日期 入库数量 A 1/1 10 A 1/1 5 A 1/2 10 B 1/5 10 其实就是两种方法,假设你的数据库是11以前的,只能先定义好查哪天到哪天 然后那么 selct 部件, sum( decode(入库日期=1号,入库数量,0), sum( decode(入库日期=2号,入库数量,0), 以此类推 from 入库表 group BY 部件(原理上就是将不是这天的变成0,再合计)要是Oracle数据库是11的话,就简单了,直接pivot搞定 pivot语法就不说了,网上一堆一堆的 ~