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对应的行数是不固定的
做成视图估计不现实了,能用存储过程实现也行。 展开
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对应的行数是不固定的
做成视图估计不现实了,能用存储过程实现也行。 展开
4个回答
展开全部
用存储过程的游标 挨条挨条的叠加
假设表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就是你需要得到的结果 然后你插入或者更新你的那个表的字段即可!
假设表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就是你需要得到的结果 然后你插入或者更新你的那个表的字段即可!
展开全部
使用存储过程可以达到,不过我觉得不比游标效果高多少
写的语句太多了,直接给你思路吧
首先定义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的话 只需要重新建立一张表,把这些数据汇总进去就可以了
不过说实话,这种方法我觉得还不如使用游标,期待高手能有什么更好的方法吧
写的语句太多了,直接给你思路吧
首先定义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的话 只需要重新建立一张表,把这些数据汇总进去就可以了
不过说实话,这种方法我觉得还不如使用游标,期待高手能有什么更好的方法吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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'
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接给这张表加上10列 →_→
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询