sql中用case when實現複雜條件查詢

 
文章摘要:近期做一個項目,實現不同條件下的不同補助類型的計算,由於後續補助的類型,金額都有可能有大的改動,考慮再三決定全部在sql server存儲過程中實現,爲後續的修改留足空間和餘地,其中用到case....when語句,感覺功能挺強大的,對付很多有複雜邏輯的操作,不失是一種好的解決辦法,代碼如下,大家可以參考語法規則,看一看

近期做一個項目,實現不同條件下的不同補助類型的計算,由於後續補助的類型,金額都有可能有大的改動,考慮再三決定全部在sql server存儲過程中實現,爲後續的修改留足空間和餘地,其中用到case....when語句,感覺功能挺強大的,對付很多有複雜邏輯的操作,不失是一種好的解決辦法,代碼如下,大家可以參考語法規則,看一看,希望對大家的學習有幫助.

CREATE PROCEDURE [dbo].[AddBZmoney] AS---確定就餐類型和補助金額

insert into SumBZ(卡號,日期,餐別,就餐金額)--彙總每日就餐明細

SELECT Detail.卡號, Detail.就餐日期, dbo.GetBZType(Detail.就餐時間) AS 餐別, --查詢就餐金額
SUM(Detail.消費金額) AS 消費金額
FROM Detail INNER JOIN
BZType ON dbo.GetBZType(Detail.就餐時間) = BZType.餐別
WHERE (Detail.狀態 = 0)
GROUP BY Detail.就餐日期, dbo.GetBZType(Detail.就餐時間), Detail.卡號

update Detail set 狀態=1 where 狀態=0--更新補助狀態

create table TempBZ--建立中間表
(
ID int,
BZmoney money
)

insert into TempBZ
SELECT SumBZ.ID,
CASE
WHEN SumBZ.就餐金額 >= BZType.補助標準 and People.加班補助=1 and SumBZ.餐別='晚餐'THEN BZType.補助標準--晚餐有加班補助的,超過4元補4元
when SumBZ.就餐金額 >= BZType.補助標準 and People.加班補助=0 and SumBZ.餐別='晚餐'then 0--晚餐無加班補助的,補0元
when SumBZ.就餐金額 >= BZType.補助標準 and SumBZ.餐別='午餐' then BZType.補助標準--午餐全部超過3元的,補3元
when SumBZ.餐別='早餐' then BZType.補助標準--早餐不補
WHEN SumBZ.就餐金額 < BZType.補助標準 THEN 0--未超過補助額度的不補
end
FROM SumBZ INNER JOIN
BZType ON SumBZ.餐別 = BZType.餐別 inner join People On People.卡號=SumBZ.卡號

declare @i int
set @i=(select min(ID) from TempBZ)
while @i<=(select max(ID) from TempBZ)
begin
update SumBZ set 補助金額=(select BZmoney from TempBZ where
ID=@i) where ID=@i
set @i=@i+1
end

drop table TempBZ

另附上函數,根據就餐時間,判斷餐別

CREATE FUNCTION [dbo].[GetBZType] ( @InputTime as datetime ) -- 確定就餐餐別
RETURNS nvarchar(10) AS
begin
declare @BZType as nvarchar(10)--輸入就餐時間返回就餐類別:早餐,中餐,晚餐
BEGIN
declare @StartTime datetime--開始時間
declare @EndTime datetime --結束時間
declare @i int
set @i=1
while @i<=(SELECT COUNT(*) FROM BZType)
begin
SELECT @StartTime=開始時間, @EndTime =結束時間, @BZType=餐別 FROM BZType where
ID=@i
if (@InputTime>= @StartTime and @InputTime<
=@EndTime)-- 如果在規定時間內,確定就餐餐別
return @BZType
set @i=@i+1
END
return @BZType
end
end

文章來自[SVN中文技術網]轉發請保留本站地址:http://www.svn8.com/sqlserver/200904024250.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章