sql 存储过程(procedure)

数据表中有字段ID、计划值、实际值,想根据计划值,实际值获取完成率(需求:当实际值为0或者NULL是完成率为0%,当计划值为0或者NULL时完成率为100%,当计划值和实际值都不为0或者NULL时完成率=实际值/计划值)


现有表内容


目标结果


实现代码

USE test
GO 

CREATE TABLE Test
(
	ID INT PRIMARY KEY IDENTITY(1,1),
	PlanValue DECIMAL(18,2),
	RealValue DECIMAL(18,2),
)
INSERT INTO Test(PlanValue, RealValue) VALUES(100,15);
INSERT INTO Test(PlanValue, RealValue) VALUES(0,15);
INSERT INTO Test(PlanValue, RealValue) VALUES(100,0);
INSERT INTO Test(RealValue) VALUES(15);
INSERT INTO Test(PlanValue) VALUES(100);
INSERT INTO Test(PlanValue, RealValue) VALUES(0,0);

SELECT * FROM Test;

--创建存储过程、遍历临时
IF EXISTS(SELECT * FROM SYSOBJECTS WHERE name='Proc_Test')  
 DROP PROCEDURE Proc_Test
GO  
CREATE PROCEDURE Proc_Test
	@MaxID int=5
	AS
		PRINT 'MaxID:'+CONVERT(NVARCHAR(50),@MaxID)
		--创建结果临时表
		CREATE TABLE #Temp_Result
		(
			ID INT,
			PlanValue DECIMAL(18,2),
			RealValue DECIMAL(18,2),
			Rate DECIMAL(18,2),
		)
		SELECT ID,PlanValue,RealValue INTO #Temp_Test FROM Test WHERE ID<=@MaxID
		WHILE EXISTS(SELECT id FROM #Temp_Test)
		BEGIN
			DECLARE @ID int, @PlanValue DECIMAL(18,2),@RealValue DECIMAL(18,2),@Rate DECIMAL(18,2)
			SET ROWCOUNT 1 
			SELECT @ID=ID,@PlanValue=PlanValue,@RealValue=RealValue from #Temp_Test 
			IF (@RealValue IS NULL OR @RealValue=0)
				SET @Rate=0
			ELSE IF(@PlanValue IS NULL OR @PlanValue=0)
				SET @Rate=100
			ELSE 
				SET @Rate=@RealValue/@PlanValue
			INSERT INTO #Temp_Result(ID,PlanValue,RealValue,Rate) VALUES(@ID,@PlanValue,@RealValue,@Rate)
			SET ROWCOUNT 0     
			DELETE FROM #Temp_Test WHERE ID = @ID   
		END
		SELECT * FROM #Temp_Result
GO 

--调用存储过程
EXEC Proc_Test 6


小提示:调用存储过程

服务器名称用 计算机名 而不是.或者IP地址

按F11进行调试

运行到存储过程

EXEC Proc_Test 6

按F11就进入到存储过程调试

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值