SQL SERVER2000 多行变一行

源数据如图,需要得到的结果是:10030800002Limit1BIN1+BIN29090%Limit2BIN355%Limit3BIN455%10031500001Li... 源数据如图,需要得到的结果是:
10030800002 Limit1 BIN1+BIN2 90 90% Limit2 BIN3 5 5% Limit3 BIN4 5 5%
10031500001 Limit1 BIN1+BIN2 930 93% Limit2 BIN3 21 2.10% Limit3 BIN4 19 1.90%
字段名无所谓,请问如何实现?
TO 生命在于说话:最好是不用游标,就是嫌游标处理效率太低才来提问,而且最主要的需求是想做成一个视图,不知道有没有更好的办法
TO gaohui_2008:每个OP_Serial对应的行数是不固定的,LIMIT字段的值也不是有规律的,不一定是LIMIT1,LIMIT2这些,可能是任意的字符串
TO 百世小糊涂:加10列不太好,也因为每个OP_Serial对应的行数是不固定的
做成视图估计不现实了,能用存储过程实现也行。
展开
 我来答
生命在于说话
2010-03-24 · TA获得超过291个赞
知道小有建树答主
回答量:504
采纳率:0%
帮助的人:203万
展开全部
用存储过程的游标 挨条挨条的叠加

假设表goods(goodsid,shortname)
declare @shortname varchar(50)
declare @name varchar(255) -----需要得到的结果
set @name='' -------初始化,很重要
declare cursor1 cursor for --定义游标cursor1
select top 3 shortname from goods --使用游标的对象(跟据需要填入select文),即你说的Select结果集
open cursor1 --打开游标

fetch next from cursor1 into @shortname --将游标向下移1行,获取的数据放入之前定义的变量@shortname中

while @@fetch_status=0 --判断是否成功获取数据
begin
set @name=@name+@shortname --进行相应处理(跟据需要填入SQL文),我这里根据你的需要叠加。
fetch next from cursor1 into @shortname --将游标向下移1行
end

close cursor1 --关闭游标
deallocate cursor1

最后 @shortname就是你需要得到的结果 然后你插入或者更新你的那个表的字段即可!
慕容爱qL
2010-04-08 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:166
采纳率:0%
帮助的人:117万
展开全部
使用存储过程可以达到,不过我觉得不比游标效果高多少
写的语句太多了,直接给你思路吧
首先定义1个全局变量 OP_serial
定义4个局部变量,t1-t4 ,t1为行数,计算出横向共有多少行,t2为列名,t3为值,t4为执行变量
首先创建一张表,名字随意,只需要有一个字段,计算出传入参数OP_serial共有多少行(select count(OP_serial) from 表 where OP_serial=@OP_serial)
@t1=结果乘于原始表的列数-去op_serial的行(当然列数这些也可以是变量,只需要一个表达式或者传入参数就可以)
注意:这里是不需要加一的,因为建立表的时候就已经把OP_serial列建立好了
@t2=1(列名)(转换加1直到等于@t1为止)
插入列到刚才建立的表
然后把数据插入到该表
select这张表
最后删除这张表
那么你传输的参数是哪个op_serial就可以得到哪个的结果了并且不会残留表
如果你需要把所有都的能查的话 而不是单一一个op_serial的话 只需要重新建立一张表,把这些数据汇总进去就可以了
不过说实话,这种方法我觉得还不如使用游标,期待高手能有什么更好的方法吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gaohui_2008
2010-03-24 · TA获得超过127个赞
知道小有建树答主
回答量:167
采纳率:0%
帮助的人:124万
展开全部
select a.*,b.*,c.* from a a,a b,a c where (a.a=b.a and a.a=c.a) and a.b='Limit1' and b.b='Limit2' and c.b='Limit3'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百世小糊涂
2010-03-24
知道答主
回答量:9
采纳率:0%
帮助的人:7.1万
展开全部
直接给这张表加上10列 →_→
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式