❶ 求大神一sql语句,怎么将下面的表行转列,按列绑定,在线等!求红领巾帮忙
--行列转换(列长度不大于255,行过多则无法进行转换与数据库机制相关)
create procere TransTable @TableName nvarchar(255)
as
declare @FlagNo int,@Rows int
create table ##tmp_table(ColName nvarchar(255))
declare @sql nvarchar(4000)
--以原来的列标题作为第一列数据
set @sql='insert into ##tmp_table
select name from syscolumns where id=(select max(id) from sysobjects where xtype=''u'' and name='''+@TableName+''')
'
exec sp_executesql @sql
set @FlagNo=1
set @sql='select @Count=COUNT(*) from '+@TableName
exec sp_executesql @sql,N'@Count int OutPut',@Rows Output
if ISNULL(@Rows,0)=0
begin
select * from ##tmp_table
drop table ##tmp_table
return
end
--列建立
set @FlagNo=1
while @FlagNo<=@Rows
begin
set @sql='
alter table ##tmp_table
add FColumn'+CAST(@FlagNo as nvarchar(10))+' nvarchar(255)'
exec sp_executesql @sql
set @FlagNo=@FlagNo+1
end
declare @ColName nvarchar(255)
declare cur cursor for
select ColName from ##tmp_table
open cur
fetch next from cur into @ColName
while @@FETCH_STATUS=0
begin
set @sql='
declare @FValue nvarchar(255)
declare @curFlag int
declare cur_value cursor for
select cast('+@ColName+' as nvarchar(255)) from '+@TableName+'
set @curFlag=1
open cur_value
fetch next from cur_value into @FValue
while @@FETCH_STATUS=0
begin
if @curFlag<='+CAST(@Rows as nvarchar(20))+'
exec TransTableUpdateValue '''+@ColName+''',@curFlag,@FValue
fetch next from cur_value into @FValue
set @curFlag=@curFlag+1
end
close cur_value
DEALLOCATE cur_value
'
--select @sql
exec sp_executesql @sql
fetch next from cur into @ColName
end
close cur
DEALLOCATE cur
select * from ##tmp_table
drop table ##tmp_table
--更新单元数据
create procere TransTableUpdateValue @ColName nvarchar(255),@FlagInt int,@value nvarchar(255)
as
declare @Sql nvarchar(1000)
set @Sql='
update ##tmp_table set FColumn'+CAST(@FlagInt as nvarchar(10))
+'='''+isnull(@value,'')+''' where ColName='''+@ColName+''''
--select @sql
exec sp_executesql @sql
execTransTable'你的表'--(行不能太多,因为每个列定义长度255,过长无法使用,sql,你知道的)
❷ 数据库 sql 行列转换是这样的吗
sql行列转换代码:
create (keyId int identity,---自动流水号
nian int not null, ---年份
info1 varchar(30),
info2 varchar(30),
qty int ---数量
)
insert into A (nian,info1,info2,qty)values(2012,'A','B',2)
insert into A (nian,info1,info2,qty)values(2013,'B','C',3)
insert into A (nian,info1,info2,qty)values(2008,'C','D',4)
insert into A (nian,info1,info2,qty)values(2018,'D','E',5)
insert into A (nian,info1,info2,qty)values(2012,'A','F',6)
insert into A (nian,info1,info2,qty)values(2008,'B','G',7)
insert into A (nian,info1,info2,qty)values(2012,'C','H',12)
insert into A (nian,info1,info2,qty)values(2013,'D','I',16)
insert into A (nian,info1,info2,qty)values(2013,'A','J',20)
go
--行转列方法1:CASE WHEN,兼容sql2000
select info1,
sum(case when nian=2012 then qty end) as [2012],
sum(case when nian=2008 then qty end) as [2008],
sum(case when nian=2018 then qty end) as [2018],
sum(case when nian=2013 then qty end) as [2013]
from A
group by info1;
GO
--行转列方法2:PIVOT,sql2005及以后版本
select *
from (select info1,nian,qty from A) as infotest
pivot(sum(qty) for nian in([2012],[2008],[2018],[2013]))as lie
GO
truncate table A
drop table A
如有疑问,及时沟通!
❸ Oracle 数据库行转列
createtableA(名称varchar2(10),"1月"varchar2(10),"2月"varchar2(10),"3月"varchar2(10),"4月"varchar2(10))
insertintoAvalues('薯仔',50,60,70,80);
insertintoAvalues('白菜',150,160,170,180);
commit;
select*fromA;
select*from(
select名称,'1月'月份,"1月"值fromA
unionall
select名称,'2月'月份,"2月"值fromA
unionall
select名称,'3月'月份,"3月"值fromA
unionall
select名称,'4月'月份,"4月"值fromA)
where名称='薯仔'
结果:
❹ 如何将excel表格行转列
以WPS 2019版本为例:
关于WPS表格转置,您可使用WPS参考下述步骤完成操作:
先复制内容,然后在需要横排显示的地方点击鼠标右键,选择“选择性粘贴”勾选“转置”确定。
❺ 数据库行转列
我之前也想将列转行,尝试了很多方法,后来觉得插入数据透视表最简单。将表导出后用插入数据表的方法可以实现你想要的结果。
❻ excel中怎样批量将行数据转换成列数据
你好,楼主想要的功能,可以使用VBA程序实现。
(一)VBA程序代码如下:(代码运行之前请做好数据备份,以免丢失)
Subabcd()
Dimi1,i2,i3,str
OnErrorResumeNext
Setmysheet1=ThisWorkbook.Worksheets("Sheet1")'定义工作表Sheet1
Fori1=1To1000'从第1行到1000行
Ifmysheet1.Cells(i1,1)<>""Then'如果单元格不是空白,则
str=Mid(mysheet1.Cells(i1,1),1,1)'截取第一个字符
IfIsNumeric(str)=TrueThen'如果截取的字符是数字,则
i2=i1
i3=1
Else
i3=i3+1
mysheet1.Cells(i2,i3)=mysheet1.Cells(i1,1)'把ABCD项写入含有数字的那一行
EndIf
EndIf
Next
EndSub
❼ SqlServer数据库怎么实现行转列的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怎样将行的值变为列,,,,
方法/步骤
首先我们建立一张表,名为RToC,各个字段的设计如下图,分别是name,course,score,表示姓名,成绩与分数,如图所示。
通过以上几个步骤,我们就可以轻松的实现行列转换了。同样,我们如果要把列转换成行, 应该怎么做呢?同样我们可以采用unpivot函数轻松实现。