當前位置:首頁 » 編程語言 » 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;
希望這個是你所需要的。