SQL SERVER 将多条记录转化为一条输出

创建了一个名为[dbo].[ufn_GetPromotionTimeByClientID]的SQL函数,该函数接受两个参数@inClient和@intuploadID。函数通过游标遍历Web_tblInitOrderUploadDetails等相关表,获取指定客户ID和上传ID对应的促销代码及其描述,并统计每个促销的出现次数。结果以'促销描述 [次数]'的格式组合成一个字符串返回。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CREATE FUNCTION [dbo].[ufn_GetPromotionTimeByClientID] (@inClient int,@intuploadID int) Returns nvarchar(1000)  AS

BEGIN

Declare @RetRecordList nvarchar(1000)

Declare @PromotionCode nvarchar(30)

Declare @PromotionDesci nvarchar(50)

Declare @Cnt int

Declare @LastItem nvarchar(30)

Declare RecCursor CURSOR FOR



Select ph.PromotionCode, ph.PromotionDesci, Count(*) NoOfTimes

From Web_tblInitOrderUploadDetails iud 

Join sales_tblOrderH oh on iud.ECINVID = oh.OrderHID 

Left Join Web_tblInitUploadPromotion iup on iud.InitOrderUploadID = iup.UploadID 

Left Join sales_tblPromotionHeader ph on iup.PromotionID = ph.PromotionID 

Where iup.PromotionID IS NOT NULL And oh.ClientID =@inClient

and  ph.PromotionID  in(select PromotionID  from Web_tblInitUploadPromotion where UploadID =@intuploadID  )

Group By ph.PromotionCode, ph.PromotionDesci

Set @LastItem  = ''

Open RecCursor 

	Fetch Next From RecCursor Into @PromotionCode, @PromotionDesci,@Cnt

	Set @RetRecordList = RTrim(@PromotionDesci) + ' [' + Convert(varchar, @Cnt) + '],'

	

	

	WHILE @@FETCH_STATUS = 0

	BEGIN

		FETCH NEXT FROM RecCursor INTO @PromotionCode, @PromotionDesci,@Cnt

			BEGIN

				IF @@FETCH_STATUS = 0

					Set @RetRecordList = @RetRecordList + RTrim(@PromotionDesci) + ' [' + Convert(varchar, @Cnt) + '],'

			END 

	END

Close RecCursor

Deallocate RecCursor

--PRINT @RetRecordList

Return @RetRecordList 

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值