要生成这样的格式可以用行列转换吗?

DMPX 2006-08-25 10:45:33
http://php.tech.sina.com.cn/mobile/search/mobile_compare.php?seq=1849,2441,152

原贴:
http://community.csdn.net/Expert/topic/4971/4971535.xml?temp=.7093927
...全文
594 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyxfly 2006-08-30
  • 打赏
  • 举报
回复
object_id('#templs')---->


object_id('Tempdb..#templs')


以及
syscolumns ---->
Tempdb..syscolumns

因为你用的临时表
xyxfly 2006-08-30
  • 打赏
  • 举报
回复
CREATE PROCEDURE Product_Balance
AS
select id,ProductName as '名称',ProductInfo as '介绍' into #templs from table3
declare @s1 varchar(8000),
@s2 varchar(8000),
@s3 varchar(8000),
@s5 varchar(8000),
@i varchar(10)
select @s1='',@s2='',@s3='',@s5='',@i='0'
select @s1=@s1+',@'+@i+' varchar(8000)'
,@s2=@s2+',@'+@i+'=''ID='''''+name+''''''''
,@s3=@s3+'
select @'+@i+'=@'+@i+'+'',[''+cast(ID as varchar)+'']=''''''+cast(isnull('+name+','''') as varchar)+'''''''' from #templs '
,@s5=@s5+'+'' union all select ''+@'+@i
,@i=cast(@i as int)+1
from Tempdb..syscolumns
where object_id('Tempdb..#templs')=id and name<>'ID'
order by colid

select @s1=substring(@s1,2,8000)
,@s2=substring(@s2,2,8000)
,@s5=substring(@s5,15,8000)
print @s1
print @s2
print @s3

exec('declare '+@s1+' select '+@s2+@s3+'
exec('''+@s5+')')
GO
DMPX 2006-08-30
  • 打赏
  • 举报
回复
table3:
lang ID CatalogID CatalogList ProductName ProductInfo AppendTime
0 1 1 1 11111 11111.jpg 2006-1-1
0 2 2 2 2222 22222.jpg 2006-1-2
0 3 3 3 3333 33333.jpg 2006-1-3
0 4 4



(所影响的行数为 4 行)

declare select
exec(')
服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'select' 附近有语法错误。
服务器: 消息 105,级别 15,状态 1,行 2
字符串 ')' 之前有未闭合的引号。

xyxfly 2006-08-30
  • 打赏
  • 举报
回复
object_id('#templs')---->


object_id('Tempdb..#templs')
改了吗?

然后在
exec('declare '+@s1+' select '+@s2+@s3+'
exec('''+@s5+')')
之前加个print('declare '+@s1+' select '+@s2+@s3+'
exec('''+@s5+')')看看

能不能贴点数据上来看看,把你的table3贴点数据上来,几条就行了,测试用的 ^_^
xyxfly 2006-08-30
  • 打赏
  • 举报
回复
呵呵 不用谢 ^_^
DMPX 2006-08-30
  • 打赏
  • 举报
回复
服务器: 消息 137,级别 15,状态 2,行 2
必须声明变量 '@chObjectType'。
服务器: 消息 137,级别 15,状态 1,行 3
必须声明变量 '@vchObjectName'。
服务器: 消息 137,级别 15,状态 1,行 4
必须声明变量 '@vchComment'。
服务器: 消息 137,级别 15,状态 1,行 5
必须声明变量 '@vchLoginName'。
服务器: 消息 137,级别 15,状态 1,行 6
必须声明变量 '@vchPassword'。
服务器: 消息 137,级别 15,状态 1,行 7
必须声明变量 '@iVCSFlags'。
服务器: 消息 137,级别 15,状态 1,行 8
必须声明变量 '@iActionFlag'。

这些段是在table3里的,临时表里只读取两个字段,怎么会出现这些呢?
VS_PB 2006-08-30
  • 打赏
  • 举报
回复
关注...

帮顶(小虾米回复我的问题以解决,谢谢)
xyxfly 2006-08-30
  • 打赏
  • 举报
回复
try:

object_id('#templs')---->


object_id('Tempdb..#templs')
xyxfly 2006-08-30
  • 打赏
  • 举报
回复
什么错误?

贴点数据上来比较好 ^_^
我再看看
DMPX 2006-08-30
  • 打赏
  • 举报
回复
CREATE PROCEDURE Product_Balance
AS
select id,ProductName as '名称',ProductInfo as '介绍' into #templs from table3
declare @s1 varchar(8000),
@s2 varchar(8000),
@s3 varchar(8000),
@s5 varchar(8000),
@i varchar(10)
select @s1='',@s2='',@s3='',@s5='',@i='0'
select @s1=@s1+',@'+@i+' varchar(8000)'
,@s2=@s2+',@'+@i+'=''ID='''''+name+''''''''
,@s3=@s3+'
select @'+@i+'=@'+@i+'+'',[''+cast(ID as varchar)+'']=''''''+cast(isnull('+name+','''') as varchar)+'''''''' from #templs '
,@s5=@s5+'+'' union all select ''+@'+@i
,@i=cast(@i as int)+1
from syscolumns
where object_id('#templs')=id and name<>'ID'
order by colid

select @s1=substring(@s1,2,8000)
,@s2=substring(@s2,2,8000)
,@s5=substring(@s5,15,8000)

exec('declare '+@s1+' select '+@s2+@s3+'
exec('''+@s5+')')
GO


我加进了一个临时表就不行了,麻烦热心的小虾米帮我解决一下
DMPX 2006-08-30
  • 打赏
  • 举报
回复
如果不进行,行列转换,用datagrid,daatlist,repeater这三个控件或者js,我就不知道要如何才能达到那种效果了
xyxfly 2006-08-30
  • 打赏
  • 举报
回复
......
DMPX 2006-08-30
  • 打赏
  • 举报
回复
因为不懂的在前台怎么操作,所以才请教如果在数据库做
xyxfly 2006-08-30
  • 打赏
  • 举报
回复
同意楼上,呵呵


可以不删,个人觉得删除习惯比较好点

realgz 2006-08-30
  • 打赏
  • 举报
回复
为什么要行列转换?

虽然用行列转换可能显得有技术含量,但是这也是不必要的消耗啊。。这种事情不应该由数据库处理

不要在数据库里做,直接移动数据集游标或者写js在前台写不更高效?
DMPX 2006-08-30
  • 打赏
  • 举报
回复
可以了,不过临时表用完之后需要不需要删除?
xyxfly 2006-08-30
  • 打赏
  • 举报
回复
ok?
chengpei_chen 2006-08-28
  • 打赏
  • 举报
回复
看看这个是邹建老师书上写的:
--行列转换示例

--测试数据
create table 表([11] varchar(2),[22] int,[33] int,[44] int,[55] int)
insert 表 select 'aa',1,2,3,6
union all select 'bb',0,1,3,5
union all select 'cc',1,2,3,6
union all select 'dd',1,2,3,6
union all select 'ee',1,2,3,6
go

--查询处理
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+'='''''
,@s3=@s3+'
select @'+@i+'=@'+@i+'+'',[''+[11]+'']=''+cast(['+name+'] as varchar) from 表'
,@s4=@s4+',@'+@i+'=''select ''+substring(@'+@i+',2,8000)'
,@s5=@s5+'+'' union all ''+@'+@i
,@i=cast(@i as int)+1
from syscolumns
where object_id('表')=id and colid<>1

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

--删除测试表
drop table 表

/*--测试结果
aa bb cc dd ee
----------- ----------- ----------- ----------- -----------
1 0 1 1 1
2 1 2 2 2
3 3 3 3 3
6 5 6 6 6

(所影响的行数为 4 行)
--*/
xyxfly 2006-08-28
  • 打赏
  • 举报
回复
有哪里不符合的自己再改改吧,呵呵 ^_^
xyxfly 2006-08-28
  • 打赏
  • 举报
回复
declare @s1 varchar(8000),
@s2 varchar(8000),
@s3 varchar(8000),
@s5 varchar(8000),
@i varchar(10)
select @s1='',@s2='',@s3='',@s5='',@i='0'
select @s1=@s1+',@'+@i+' varchar(8000)'
,@s2=@s2+',@'+@i+'=''ID='''''+name+''''''''
,@s3=@s3+'
select @'+@i+'=@'+@i+'+'',[''+cast(ID as varchar)+'']=''''''+cast(['+name+'] as varchar)+'''''''' from test'
,@s5=@s5+'+'' union all select ''+@'+@i
,@i=cast(@i as int)+1
from syscolumns
where object_id('test')=id and name<>'ID'
order by colid

select @s1=substring(@s1,2,8000)
,@s2=substring(@s2,2,8000)
,@s5=substring(@s5,15,8000)

exec('declare '+@s1+' select '+@s2+@s3+'
exec('''+@s5+')')

ID 1 2 3
-------- --------- --------- ---------
型号 诺基亚-1 诺基亚-2 诺基亚-3
颜色 红色 金色 黑色
上市时间 2004年1月 2005年1月 2006年1月
参考价 1500 1400 2000
尺寸 118M 110M 100M
重量 143 140 100

(所影响的行数为 6 行)
加载更多回复(14)

34,590

社区成员

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

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