sybase 带参数存储过程实现行转列

创建一个存储过程,用于处理行专列问题
USE 数据库名称
– USE sjk
GO
– 创建临时表
IF OBJECT_ID(‘#TEMP_MC’) IS NOT NULL
drop table #TEMP_MC
GO

CREATE TABLE #TEMP_MC (
DSR_BH char(32),
DSR_MC varchar(300),
nums int
);
GO
– 存储过程如果存在先删除
IF OBJECT_ID(‘YWST…PR_INIT_CTRY’) IS NOT NULL
BEGIN
DROP PROCEDURE PR_INIT_CTRY
END
GO

CREATE PROCEDURE PR_INIT_CTRY (@tName varchar(100) )
AS
BEGIN
DECLARE @SELECT_SQL varchar(3000)
– 待处理的 出庭人员信息

-- 将基础数据 插入临时表
SET @SELECT_SQL = 'INSERT INTO #TEMP_MC ( DSR_BH, DSR_MC)
	select mct.C_BH DSR_BH, C_MC DSR_MC
	FROM mct  where mct.C_MC is not null and mct.C_BH is not null'
 -- cs
 if exists ( select 1 from ( select 'CS' name ) tab where name = @tName)
   SET @SELECT_SQL = ''
EXECUTE(@SELECT_SQL)

--  组装名称 ,将出庭人员姓名组装成  xx;xx;xx;xx 
declare @state varchar(400)
declare @id VARCHAR(32)
declare @count int
set @state = ''
set @count = 0  
update #TEMP_MC
set DSR_MC=(case when @id = DSR_BHthen @state || ';' || DSR_MC
else DSR_MC end) , 
@state =(case when @id = DSR_BH then @state || ';' || DSR_MC
else DSR_MC end) , 
nums =(case when @id = DSR_BH then @count + 1
else 1 end) , 
@count =(case when @id = DSR_BH then @count + 1 else 1 end) , 
@id = DSR_BH

– 使用游标 循环 临时表,
– 声明游标变量
DECLARE @KTBH varchar(300)

-- 声明游标并打开
DECLARE fyidCursor CURSOR FOR  select DISTINCT  ktbh  from YWST.dbo.#TEMP_MC 

OPEN fyidCursor

-- 获取第一个元素
FETCH NEXT FROM fyidCursor INTO @KTBH

DECLARE @INSERT_SQL varchar(3000)

-- 循环处理元素
WHILE @@FETCH_STATUS = 0
BEGIN
    -- 处理当前元素
    -- 处理数据
	SET @INSERT_SQL = ''
	-- 打印sql,调试的时候开

– EXEC PRINTSQL @INSERT_SQL
– 执行sql
EXECUTE(@INSERT_SQL)
– 获取下一个元素
FETCH NEXT FROM fyidCursor INTO @KTBH
END
– 关闭游标
CLOSE fyidCursor
DEALLOCATE fyidCursor

 -- 将这个类型的案件数据清空
EXECUTE('delete From  #TEMP_MC')

END
GO

– 执行存储过程
exec PR_INIT_CTRY ‘PT’
exec PR_INIT_CTRY ‘CS’

GO

– 删除存储过程
DROP PROCEDURE PR_INIT_CTRY
GO
drop table #TEMP_MC
GO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羱滒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值