我正在尝试编写一个SQL Server存储过程,该过程将返回我的航班号列表,并根据价格对航班进行评级,如下所示: 价格< = 500为便宜,价格> 500和价格> = 1500为正常或否则为昂贵
我试过这个,但我觉得我离开了:
create procedure rate_flights
@result varchar(50) output
as
declare @fno varchar(100)
declare @price numeric(10,2)
begin
set @fno = (select fno from flights)
set @price = (select price from flights)
set @result = (select case
when @price <= 500 then @fno + ' '+'Φθηνή'
when @price > 501 and @price < 1500 then @fno + ' '+ 'Κανονική'
when @price > 1500 then @fno + ' ' + 'Ακριβή'
end)
end
declare @ret varchar(50)
execute rate_flights @result = @ret out
print @ret
如果有人能指出我正确的方向,我将不胜感激。
提前谢谢。
答案 0 :(得分:0)
我认为你已经过度复杂了,而且你还没有返回整个列表。相反,您需要使用case语句进行简单的选择。
create procedure rate_flights
as
select
fno,
case
when price <= 500 then 'Cheap'
when price >500 and price <=1500 then 'Normal'
else 'Expensive'
end as Rating
from flights
答案 1 :(得分:0)
您从select中获取变量(单个值),因此您只获得@price和@fno的第一个结果
你应该在选择的同时进行计算;并且可能你不想返回一个varchar而是一个表。
开始考虑集/表,而不是标准数据类型变量;如果需要,可以使用CTE或表变量,但对于SQL数据库,则需要另一种编程范例
我的一般建议是:
create procedure rate_flights
as
begin
select fno, price,
case
when @price <= 500 then @fno + ' '+'Φθηνή'
when @price > 501 and @price < 1500 then @fno + ' '+ 'Κανονική'
when @price > 1500 then @fno + ' ' + 'Ακριβή'
end as rate
from flights
end