当前位置:首页 » 数据仓库 » 数据库表行转列
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

数据库表行转列

发布时间: 2022-09-03 07:57:01

❶ 求大神一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函数轻松实现。