这种数据格式的行列转换 如何实现呢

wynlc 2013-04-12 12:58:04
想由①的数据格式 得到 ②的数据格式

DECLARE @a TABLE
(
EE002 NVARCHAR(50),
EE139 numeric(18, 1),
EE140 numeric(18, 2),
EE141 numeric(18, 3),
EE142 numeric(18, 4),
EE143 numeric(18, 5),
EE144 numeric(18, 6),
EE145 numeric(18, 7),
EE146 numeric(18, 8),
EE147 numeric(18, 9)
)
insert into @a
select
'10:34',1,1,0,1,0,0,0,0,0
union
select
'10:35',0,0,0,0,0,0,0,0,0
union
select
'10:36',0,0,0,0,0,0,0,0,0
union
select
'10:37',0,0,0,0,0,0,0,0,0
union
select
'10:38',0,0,0,0,0,0,0,0,0
union
select
'10:39',0,0,0,0,0,0,0,0,0
union
select
'10:40',0,0,1,0,1,0,0,0,0
union
select
'10:41',0,0,0,0,0,0,0,0,0
union
select
'10:42',0,0,0,0,0,0,0,0,0

select * from @a
...全文
248 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
marongc 2013-04-14
  • 打赏
  • 举报
回复
小F 好久不见了,我最近在研究西游记的女儿国的那首歌了
杰拉尔 2013-04-14
  • 打赏
  • 举报
回复
wynlc 2013-04-12
  • 打赏
  • 举报
回复
引用 2 楼 fredrickhu 的回复:
在论坛里面搜索90°旋转 实在是太多了。
谢谢 小F
wynlc 2013-04-12
  • 打赏
  • 举报
回复
if exists (select * from dbo.sysobjects
where id = object_id(N'[dbo].[p_zj]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_zj]
GO
/*--行列互换的通用存储过程(原著:邹建):将指定的表,按指定的字段进行行列互换*/
 
create proc p_zj
       @tbname sysname, --要处理的表名
       @fdname sysname, --做为转换的列名
       @new_fdname sysname='' --为转换后的列指定列名
as
declare @s1 varchar(8000) , @s2 varchar(8000),
        @s3 varchar(8000) , @s4 varchar(8000),
        @s5 varchar(8000) , @i varchar(10)
select @s1 = '' , @s2 = '' , @s3 = '' , @s4 = '' , @s5 = '' , @i = '0'
select @s1 = @s1 + ',@' + @i + ' varchar(8000)',
       @s2 = @s2 + ',@' + @i + '=''' + case isnull(@new_fdname , '') when '' then ''
       else @new_fdname + '=' end + '''''' + name + '''''''',
       @s3 = @s3 + 'select @' + @i + '=@' + @i + '+'',['' + [' + @fdname + 
       ']+'']=''+cast([' + name + '] as varchar) from [' + @tbname + ']',
       @s4 = @s4 + ',@' + @i + '=''select ''+@' + @i,
       @s5 = @s5 + '+'' union all ''+@' + @i,
       @i=cast(@i as int)+1
from syscolumns
where object_id(@tbname)=id and name<>@fdname
 
select @s1=substring(@s1,2,8000),
       @s2=substring(@s2,2,8000),
       @s4=substring(@s4,2,8000),
       @s5=substring(@s5,16,8000)
exec('declare ' + @s1 + 'select ' + @s2 + @s3 + 'select ' + @s4 + '
exec(' + @s5 + ')')
go
 
--用上面的存储过程测试:
 
create table Test(月份 varchar(4), 工资 int, 福利 int, 奖金 int)
insert Test 
select '1月',100,200,300 union all
select '2月',110,210,310 union all
select '3月',120,220,320 union all
select '4月',130,230,330
go
 
exec p_zj 'Test', '月份' , '项目'
 
drop table Test
drop proc p_zj
 
/*
项目   1月         2月         3月         4月          
---- ----------- ----------- ----------- ----------- 
福利   200         210         220         230
工资   100         110         120         130
奖金   300         310         320         330
*/
邹老师威武
--小F-- 2013-04-12
  • 打赏
  • 举报
回复
在论坛里面搜索90°旋转 实在是太多了。
wynlc 2013-04-12
  • 打赏
  • 举报
回复
自己 顶一下

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧