2017-05-18 12 views
0

飛行機番号のリストを返すSQL Serverストアドプロシージャを作成しようとしましたが、その価格に基づいて飛行を評価します。 price < = 500 as Cheap、価格私はこれを試してみましたが、私は遠く離れてるように私は感じる> 500と価格> = 1500標準として、あるいは他のような高価SQL Serverのストアドプロシージャ - 便番号を返す

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

したい場合は、CTEのか、テーブル変数を使用することができますが、SQLデータベースのため、あなたは代替プログラミングパラダイムを必要とする私の一般的な提案のようなものでしょうか?リストを取得したい場合は、「...を選択した場合は...」を実行し、結果を1つ戻す必要はありません。しかし、 "set @fno =(フライトからfnoを選択")というステートメントは、ランダム化された順番で最初の結果を得ました。 – inon

+0

あなたの質問のタイトルを編集して何かを意味してください。 – STLDeveloper

答えて

0

あなたが@priceと@fno

のための唯一の最初の結果を得るように、あなたが選択よりも同時に計算を行う必要があり、選択から変数(単一値)を取得しています。おそらくあなたはvarcharを返すのではなく、テーブルを返すことを望んでいます。

標準データ型変数ではなく、セット/テーブルについて考え始めます。あなたは何を意味する

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 
+0

は、私はあなたが選択する場合、物事が容易になったであろうこの方法を使用することができます知らなかった完全に正直に言うと返信をお願い致しません@Sakisあなたの答え – Sakis

0

は、私はあなたがそれを複雑に超えていると思うし、あなたは全体のリストを返していません。代わりに、あなたのケースステートメントで単純な選択が必要です。

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 
+0

うわー、それは私は問題が – Sakis

+0

のためにどうもありがとうございました思ったより道簡単でした。 D – scsimon