嵌套游标,读取相同单号,不同Flag标记组,相同的标记组合成一行

首先看图片

相同的单号:A0001 不同的Flag组 1和2

---下面是游标(其实游标就和我们写代码差不多,它主要像我们循环dataTable,在进行判断差不多)

-- select * from FX_Get_O_OrderContent_Flag_OrderData('A0001')
ALTER function [dbo].[FX_Get_O_OrderContent_Flag_OrderData]
(
	   @OrderNO nvarchar(20)
)
returns @OrderContentOrdrNODatat TABLE
(
	[OrderNo] nvarchar(20),
	[Content] nvarchar(1000),
	[Flag] int
)
as 
	begin
	    DECLARE @ContentString nvarchar(1000)
	    set @ContentString=''
		DECLARE @Content nvarchar(20) --创建变量
		DECLARE @TypeEnglish nvarchar(1000) --创建变量
		DECLARE @Percentage float --创建变量
		DECLARE @Flag int 
		DECLARE @NFlag int
		DECLARE myCursor CURSOR FOR select distinct [Flag] from O_OrderContent where [OrderNo]= @OrderNO     ---读取外层游标
		open myCursor --打开游标
        fetch next from myCursor into @Flag  --读取外层游标
		 WHILE @@FETCH_STATUS=0
			BEGIN 
				
				Declare MyInsideCursor CURSOR FOR select [Percentage],[Content],[TypeEnglish],[Flag] from O_OrderContent where [OrderNo]= @OrderNO  --声明内层游标 
				open MyInsideCursor --打开内层游标
				fetch next from MyInsideCursor into  @Percentage, @Content,@TypeEnglish,@NFlag
				
				while @@FETCH_STATUS=0
					BEGIN
						if @Flag=@NFlag --外Flag等于内NFlag
							set @ContentString=@ContentString+@TypeEnglish+' '+ convert(nvarchar(20),@Percentage)+'%'+' '+@Content +'<br/>'
							fetch next from MyInsideCursor into  @Percentage, @Content,@TypeEnglish,@NFlag
					END 
				 insert into @OrderContentOrdrNODatat([OrderNo],[Content],[Flag])values(@OrderNO,@ContentString,@Flag)
				 
				 set @ContentString='' --设置为空
				 CLOSE MyInsideCursor   --关闭内层
				 DEALLOCATE MyInsideCursor  --撤销内层游标
				 fetch next from myCursor into @Flag  --读取外层游标-外层游标继续向下移动一行   
			End
			
	   close myCursor --关闭游标
	   deallocate myCursor --撤销游标
	   RETURN
	  end
		  
		 
		 

 ---得到效果如下:

本想用SQL语句来写的,搞了一下还是没搞出来,项目需要,先就用游标写了(性能当然不是很好)!

转载于:https://www.cnblogs.com/yzenet/archive/2012/11/15/2771079.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值