当前位置:首页 » 编程语言 » sql计算并存储
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql计算并存储

发布时间: 2023-01-20 07:54:47

sql存储过程怎么使用

一、简单的储存过程:

1、创建一个存储过程

create procere GetUsers()

begin

select * from user;

end;12345

2、调用存储过程

call GetUsers();12

3、删除存储过程

drop procere if exists GetUsers;

二、带参数的存储过程

1、MySql 支持 IN (传递给存储过程) , OUT (从存储过程传出) 和 INOUT (对存储过程传入和传出) 类型的参数 , 存储过程的代码位于 BEGIN 和 END 语句内 , 它们是一系列 SQL 语句 , 用来检索值 , 然后保存到相应的变量 (通过指定INTO关键字) ;

2、下面的存储过程接受三个参数 , 分别用于获取用户表的最小 , 平均 , 最大分数 , 每个参数必须具有指定的类型 , 这里使用十进制值(decimal(8,2)) , 关键字 OUT 指出相应的参数用来从存储过程传出

create procere GetScores(

out minScore decimal(8,2),

out avgScore decimal(8,2),

out maxScore decimal(8,2)

)

begin

select min(score) into minScore from user;

select avg(score) into avgScore from user;

select max(score) into maxScore from user;

end;1234567891011

3、调用此存储过程 , 必须指定3个变量名(所有 MySql 变量都必须以@开始) , 如下所示 :

call GetScores(@minScore, @avgScore, @maxScore);12

4、该调用并没有任何输出 , 只是把调用的结果赋给了调用时传入的变量@minScore, @avgScore, @maxScore, 然后即可调用显示该变量的值 :

select @minScore, @avgScore, @maxScore;

5、使用 IN 参数 , 输入一个用户 id , 返回该用户的名字 :

create procere GetNameByID(

in userID int,

out userName varchar(200)

)

begin

select name from user

where id = userID

into userName;

end;12345678910

6、调用存储过程 :

call GetNameByID(1, @userName);

select @userName;123

② SQL 中关于计算薪资的存储过程

CREATE TABLE [HRSALARY] (
[YYYYMM] [char] (8) NOT NULL ,
[EId] [int] NOT NULL ,
[SolidPay] [money] NULL ,
[ERate] [money] NULL ,
CONSTRAINT [PK_HRSALARY] PRIMARY KEY CLUSTERED
(
[YYYYMM],
[EId]
) ON [PRIMARY]
) ON [PRIMARY]
GO

CREATE TABLE [PayScale] (
[YYYYMM] [char] (6) NOT NULL ,
[EId] [int] NOT NULL ,
[EName] [varchar] (50) NULL ,
[PayScale] [money] NULL ,
[Premium] [money] NULL ,
[EType] [int] NULL ,
CONSTRAINT [PK_PayScale] PRIMARY KEY CLUSTERED
(
[YYYYMM],
[EId]
) ON [PRIMARY]
) ON [PRIMARY]
GO

Create Procere dbo.Sp_UpdateSolidPay
As
Begin
Declare @Type int,@EId int, @pay money,@Pre money, @YYYYMM char(6)
Declare @SolidPay money,@Erate money
Declare Fetch_EIds_Cursor cursor for select yyyymm,Eid,payscale,premium,Etype from PayScale

Open Fetch_EIds_Cursor
Fetch Next Fetch_EIds_Cursor into @YYYYMM,@EId,@pay,@Pre,@Type
While @@FETCH_STATUS = 0
Begin
Select @Erate = case when @pay>=0 and @pay<=2000 then 0.01 when @pay >2000 and @pay<= 3000 then 0.05 when @pay >3000 then 0.1 else 0 end

If @Type = 1 --正式员工
Begin
Select @SolidPay = (@pay+@Pre)*(1-@Erate)/*求实发工资*/
End
If @Type = 2 --临时员工
Begin
Select @SolidPay = (@pay)*(1-@Erate)/*求实发工资*/
End
If @Type = 3 --实习员工
Begin
Select @SolidPay = (@pay)*0.05+200,@Erate = 0 /*求实发工资*/
End
Update HRSALARY set SolidPay = @SolidPay,ERate = @Erate where yyyymm = @YYYYMM and EId = @EId
If @@ROWCOUNT = 0
Begin
insert into HRSALARY(YYYYMM,EId,SolidPay,ERate)
values(@YYYYMM,@EId,@SolidPay,@Erate)
If @@Error <> 0 goto L_Exit
End
If @@Error <> 0 goto L_Exit

Fetch Next Fetch_EIds_Cursor into @YYYYMM,@EId,@pay,@Pre,@Type
End
CLOSE Fetch_EIds_Cursor
DEALLOCATE Fetch_EIds_Cursor

Return 0

L_Exit:
CLOSE Fetch_EIds_Cursor
DEALLOCATE Fetch_EIds_Cursor
Return -1
End

③ 如何在SQL中对一个表的多个元组进行计算并相应存储

不明白你的问题啊!
select (t.f1+t.f2)*t.f3 as compute from table t
如果table中的字段f1,f2,f3为数字型,是可以在select中直接使用数学运算符的。

④ 如何让数据库自动计算并存储

就是计算字段?
给你个例子
CREATE TABLE test(qty INT,price MONEY,amount AS [price]*[qty])
这样不就可以了?

⑤ sql计算查询的结果如何保存在表的一列中


select a.language,a.songname,a.exist,c.col001,c.col002 from a
left join b c on a.filename=c.col001
where not exists(select 1 from b where col001=c.col001 and col002>c.col002)

⑥ sql 存储过程判断时间并计算合计如何写

你确定你的表对吗? 第一次收款金额+第二次收款金额 这两个字段在哪?

其实用case when 应该就能解决你的问题了。

⑦ sql中两个字段运算并把结果存入一个新字段中

参考以下sql

SELECTSUBSTR(DATE_ADD(CONCAT('2018-11-12','12:30:31'),INTERVAL10MINUTE)FROM12FOR8)

SELECTSUBSTR(DATE_ADD(CONCAT('2018-11-12',IC_Time),INTERVALIFNULL(Transfer_TimeF,0)MINUTE)FROM12FOR8)FROMTrip_Chaining_hc1203ADD

与Alighting_Time相减,需要先知道Alighting_Time是什么类型,不过你也可以参考着写了

⑧ SQL取两个值计算然后定义其属于的范围,应该怎么写存储过程语句

call sp_add();
是不是你定义的过程有问题吧,并没有指出返回结果来
像我这样是可以的:

CREATE PROCEDURE sp_add(a int, b int,out c int)
begin

set c=a+ b;

end;
调用过程:
call sp_add (1,2,@a);
select @a;

⑨ sql 语句编写 存储过程 数学计算

如果只是写个存储过程,那很简单的,因为不知道你具体功能,我只能这样写:
/*已有数据表1.列名a,b,c,d,e,f
编写存储过程:a^2+b*(c+d)/2-f*e*/
IF OBJECT_ID('table1') IS NOT NULL
DROP TABLE table1;
GO
CREATE TABLE table1
(a INT ,
b INT ,
c INT ,
d INT,
e INT ,
f INT )
GO
IF OBJECT_ID('sptabel1') IS NOT NULL
DROP PROCEDURE sptabel1;
GO
CREATE PROCEDURE sptabel1
AS
BEGIN
DECLARE @test INT,
@a INT ,
@b INT ,
@c INT ,
@d INT ,
@e INT ,
@f INT ;
DECLARE cur CURSOR FOR SELECT * FROM table1;
OPEN cur;
FETCH NEXT FROM cur INTO @a,@b,@c,@d,@e,@f;
WHILE @@FETCH_STATUS=0
BEGIN
SET @test=POWER(@a,2)+@b*(@c+@d)/2-@f*@e;
FETCH NEXT FROM cur INTO @a,@b,@c,@d,@e,@f;
END;
CLOSE cur;
DEALLOCATE cur;
END;
希望这个是你所需要的。