sql列变行
⑴ sql 列转行
先建一张转换后的表
create table changed
(
id number,
key varchar2(10),
val varchar2(10)
)
然后执行下面的插入语句
insert all
into changed(id,key,val) values(id,'a',a)
into changed(id,key,val) values(id,'b',b)
into changed(id,key,val) values(id,'c',c)
into changed(id,key,val) values(id,'d',d)
into changed(id,key,val) values(id,'e',e)
select id,a,b,c,d,e from change;
如果需要继续添加,就模仿上面的格式写好了,最后别忘记commit;
⑵ sql把列变成行
可以用pivot table
⑶ sql语句列转行
我整理的行转列的问题:
--创建tb表
createtabletb(姓名varchar(10),课程varchar(10),分数int)
insertintotbvalues('张三','语文',74)
insertintotbvalues('张三','数学',83)
insertintotbvalues('张三','物理',93)
insertintotbvalues('李四','语文',74)
insertintotbvalues('李四','数学',84)
insertintotbvalues('李四','物理',94)
go
select*Fromtb
--SQLSERVER2000静态行转列
select姓名as姓名,
max(case课程when'语文'then分数elsenullend)语文,
max(case课程when'数学'then分数elsenullend)数学,
max(case课程when'物理'then分数elsenullend)物理
fromtb
groupby姓名
--SQLSERVER2000动态SQL,指课程不止语文、数学、物理这三门课程。(以下同)
declare@sqlvarchar(8000)
set@sql='select姓名'
select@sql=@sql+',max(case课程when'''+课程+'''then分数else0end)['+课程+']'
from(selectdistinct课程fromtb)asa
set@sql=@sql+'fromtbgroupby姓名'
exec(@sql)
--SQLSERVER2005静态SQL。
select*from(select*fromtb)apivot(max(分数)for课程in(语文,数学,物理))b
--SQLSERVER2005动态SQL。
declare@sqlvarchar(8000)
select@sql=isnull(@sql+'],[','')+课程fromtbgroupby课程
set@sql='['+@sql+']'
exec('select*from(select*fromtb)apivot(max(分数)for课程in('+@sql+'))b')
希望对你的学习有帮助。
⑷ 如何把Sql的列值变成行值
比如:有张学生成绩表(tb)如下:
Name Subject Result
张三 语文74
张三 数学83
张三 物理93
李四 语文74
李四 数学84
李四 物理94
代码如下:
create table tb
(
Name varchar(10) ,
Subject varchar(10) ,
Result int
)
insert into tb(Name , Subject , Result) values(张三 , 语文 , 74)
insert into tb(Name , Subject , Result) values(张三 , 数学 , 83)
insert into tb(Name , Subject , Result) values(张三 , 物理 , 93)
insert into tb(Name , Subject , Result) values(李四 , 语文 , 74)
insert into tb(Name , Subject , Result) values(李四 , 数学 , 84)
insert into tb(Name , Subject , Result) values(李四 , 物理 , 94)
go
⑸ sql数据库把一列数据转换成一行数据
这是一个典型的 行列转换问题。这些数据应该有着统一的一列吧,例如:标识人员的身份证号码之类的。方法别人博客中都很详尽,我就不在此罗列了。 可检索关键字 “SQL 行列转换”或者看下面链接
http://www.cnblogs.com/zhangzt/archive/2010/07/29/1787825.html
http://hi..com/wrgcxfcoybinpur/item/90f388e2ec0f853286d9decc
⑹ sql语句列转行
--方法对了,其实超级容易,下面给你一个例子,实际的请自己改写一下,以下代码可以在sql server中执行,返回的就是你要的结果
--将你的数据存入表
declare @a table(ii varchar(10),jj varchar(10))
insert into @a values('c_003','套餐A')
insert into @a values('c_004','49')
insert into @a values('c_005','300')
insert into @a values('c_003','套餐B')
insert into @a values('c_004','59')
insert into @a values('c_005','700')
--检索一下,看是否是正确的
select * from @a
--将数据行做成列表
declare @b table(c_003 varchar(10),c_004 varchar(10),c_005 varchar(10))
--定义游标完成数据转换
declare cur_a_b cursor for select ii,jj from @a
declare @i int --定义步长,方便以3为不同的步长
set @i=0
declare @ii varchar(10)
declare @jj varchar(10)
--临时的c_003变量
declare @fn varchar(20)
--打开游标
open cur_a_b
fetch next from cur_a_b into @ii,@jj
while @@fetch_status = 0
begin
if @i % 3 = 0
begin
set @fn = @jj
insert into @b(c_003) values(@fn)
end
if @i % 3 = 1 update @b set c_004=@jj where c_003=@fn
if @i % 3 = 2 update @b set c_005=@jj where c_003=@fn
set @i = @i + 1
fetch next from cur_a_b into @ii,@jj
end
close cur_a_b
deallocate cur_a_b
--最终结果
select * from @b
--呵呵,写了这么多也不容易,加点分吧
⑺ sql 查询出一列内容,如何让它成一行显示。
进行行转列下面是相关语法等
PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现
PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P
注意:PIVOT、UNPIVOT是SQL Server 2005 的语法,使用需修改数据库兼容级别(在数据库属性->选项->兼容级别改为 90 )
SQL2008 中可以直接使用
完整语法:
table_source
PIVOT(
聚合函数(value_column)
FOR pivot_column
IN(<column_list>)
)
View Code
UNPIVOT 用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现
完整语法:
table_source
UNPIVOT(
value_column
FOR pivot_column
IN(<column_list>)
)
⑻ SQL语句 列转行
-- ========================= PIVOT 行列转置 ===========================
-- 1、【行列转置PIVOT】
declare @Score table(StuNo varchar(10), StuName varchar(50), CourseName varchar(50), Score int)
insert into @Score
select '1', 'Tom', 'Math', 80 union all
select '1', 'Tom', 'English', 82 union all
select '1', 'Tom', 'Geography', 84 union all
select '2', 'Jone', 'Math', 79 union all
select '2', 'Jone', 'English', 88 union all
select '2', 'Jone', 'Geography',86
select * from @Score
SELECT StuNo, StuName, Math, English, [Geography]
FROM @Score PIVOT (MAX(Score) FOR CourseName in (Math, English, [Geography]) ) AS ScoreList
ORDER BY StuNo
-- 2、【列行转置UNPIVOT】
declare @ScoreList table(StuNo varchar(10), StuName varchar(50), Math int, English int, [Geography] int)
insert into @ScoreList
select '1', 'Tom', 80, 82, 84 union all
select '2', 'Jone', 79, 88, 86
select * from @ScoreList
SELECT StuNo, StuName, CourseName, Score
FROM @ScoreList UNPIVOT (Score FOR CourseName in (Math, English, [Geography]) ) AS ScorePvtTable
ORDER BY StuNo
⑼ SQL语句如何列变行
select 字段名按照你要求的排序就行了
select a,b,c from tableName 那么输出就是 abc对应的顺序
⑽ sql语句怎么把列变成行
create table rotatetable1 (序号 int,company char(66),box_weight char(12),废塑料numeric(10,2)),废五金 numeric(10,2)),废钢铁 numeric(10,2)),废纸 numeric(10,2)),废有色 numeric(10,2)),废纤维 numeric(10,2)),其它 numeric(10,2)),合计 numeric(10,2)));
insert into rotatetable1(company,box_weight) select name ,'weight' from sum1 group by name;
insert into rotatetable1(company,box_weight) select name ,'box' from sum1 group by name;
update rotatetable1 set 废塑料=box from sum1as a where a.name=rotatetable1.company and box_weight='box' and hsname='废塑料';
update rotatetable1 set 废塑料=weight from sum1as a where a.name=rotatetable1.company and box_weight='weight' and hsname='废塑料';
::: :::
update rotatetable1 set 其它=box from sum1as a where a.name=rotatetable1.company and box_weight='box' and hsname='其它';
update rotatetable1 set 其它=weight from sum1as a where a.name=rotatetable1.company and box_weight='weight' and hsname='其它';
::: :::
update rotatetable1 set 合计=废塑料+废五金+废钢铁+废纸+废有色+废纤维+其它;
(所有涉及表的行列转换均可按照这种方式实现。)