存储过程中如何将sql查询结果集横向显示出,谢谢!

jlxlh 2002-08-24 12:49:04
存储过程中如何将sql查询结果集横向显示出,谢谢,即

字段1 字段2 显示成: 1 2 3 4 5
1 1 1 2 3 4 5
2 2
3 3
4 4
5 5

谢谢!
...全文
348 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jlxlh 2002-08-26
  • 打赏
  • 举报
回复
to h_S2000(处理器)
谢谢,立即调试,成功给分,再次感谢!
h_S2000 2002-08-26
  • 打赏
  • 举报
回复
jlxlh(行者) : 方法不妥
这种建立临时表的坐法很浪费

其实这是一种电信的交叉表做法Sqlserver中有交叉表的例子

不过下面是偶的一个输出交叉表的存储过程,比较通用
//******************************************************************
CREATE procedure CorssTab
@strTabName as varchar(50) = 'Employees', --此处放表名
@strCol as varchar(50) = 'City', --表头分组依据字段
@strGroup as varchar(50) = 'TitleOfCourtesy',--分组字段
@strNumber as varchar(50) = 'ReportsTo', --被统计的字段
@strSum as varchar(10) = 'Sum' --运算方式
AS

DECLARE @strSql as varchar(1000), @strTmpCol as varchar(100)
EXECUTE ('DECLARE corss_cursor CURSOR FOR SELECT DISTINCT ' + @strCol + ' from ' + @strTabName + ' for read only ') --生成游标

begin
SET nocount ON
SET @strsql ='select ' + @strGroup + ', ' + @strSum + '(' + @strNumber + ') AS [' + @strSum + ' of ' + @strNumber + ']' --查询的前半段

OPEN corss_cursor
while (0=0)
BEGIN
FETCH NEXT FROM corss_cursor --遍历游标,将列头信息放入变量@strTmpCol
INTO @strTmpCol
if (@@fetch_status<>0) break
SET @strsql = @strsql + ', ' + @strSum + '(CASE ' + @strCol + ' WHEN ''' + @strTmpCol + ''' THEN ' + @strNumber + ' ELSE Null END) AS [' + @strTmpCol + ' ' + @strCol + ']' --构造查询
END
SET @strsql = @strsql + ' from ' + @strTabname + ' group by ' + @strGroup --查询结尾

EXECUTE(@strsql) --执行



IF @@error <>0 RETURN @@error --如果出错,返回错误代码
CLOSE corss_cursor
DEALLOCATE corss_cursor RETURN 0 --释放游标,返回0表示成功

end
GO
jlxlh 2002-08-26
  • 打赏
  • 举报
回复
to h_S2000(处理器) :
成功了,特来给分,十分感谢,十分感谢
有问题常联系,我的email:jlxlh123@163.com
再次感谢
jlxlh 2002-08-25
  • 打赏
  • 举报
回复
这是我调试末成的代码,请大家看那里不妥,是否有实现的机会?谢谢

declare @infeeprintmoney money ,@N int,@p char(10)
create table #infeeitem_alldept(inpidno char(15),p1 money,p2 money,p3 money,p4 money,p5 money,p6 money,
p7 money,p8 money,p9 money,p10 money,p11 money,p12 money,p13 money,p14 money,p15 money)

insert #infeeitem_alldept(inpidno)
values(20020000001)
--从单据明细表得到该单据的内容(使用指针)
create table #lx(feeprintitemname char(10),infeeprintmoney money,totalinmoney money,totalmoney money,lastmoney money)
insert #lx
exec proc_infee '20020000001'
set @N=0
DECLARE infee CURSOR FOR --声明
select infeeprintmoney from #lx
OPEN infee --打开
FETCH NEXT FROM infee
INTO @infeeprintmoney
WHILE (@@FETCH_STATUS <> -1)
BEGIN
set @N=@N+1

set @p='p'+convert(char,@N)

update #infeeitem_alldept
set @p=@infeeprintmoney
where inpidno='20020000001'

FETCH NEXT FROM infee
INTO @infeeprintmoney
END
CLOSE infee
DEALLOCATE infee

select * from #infeeitem_alldept
drop table #infeeitem_alldept
drop table #lx

wxn1983 2002-08-25
  • 打赏
  • 举报
回复
[限定其显示格式
CHENGXB 2002-08-24
  • 打赏
  • 举报
回复
如果记录数常变的,好像没什么简单的办法。
见一个临时表,把数据一个一个填进去!
lyq 2002-08-24
  • 打赏
  • 举报
回复
up
jlxlh 2002-08-24
  • 打赏
  • 举报
回复
to pekiee(绿光)
谢谢,在存储过程外面已实现,就是因为那样代码有点多,而且前后都有,才考虑用,sql语句实现,试了多次列的变量总是付不上值,????
帮想想有sql语句实现和临时表,如何实现,能否实现????谢谢!
pekiee 2002-08-24
  • 打赏
  • 举报
回复
你可以用StringGrid,将记录一条条读到他的column里,
DBGrid,没这样的功能

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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