SQL Server存储过程 - 返回航班号

时间:2017-05-18 21:03:10

标签: sql-server stored-procedures

我正在尝试编写一个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

如果有人能指出我正确的方向,我将不胜感激。

提前谢谢。

2 个答案:

答案 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