2017-05-18 5 views
0

Ich habe versucht, eine gespeicherte SQL Server-Prozedur zu schreiben, die eine Liste meiner Flugnummern zurückgeben würde und basierend auf dem Preis würde der Flug wie folgt bewerten: Preis < = 500 als Billig, Preis> 500 und Preis> = 1500 als normal oder auch als TeureSQL Server gespeicherte Prozedur - Rückflugnummern

ich habe dies versucht, aber ich fühle mich wie ich weg bin:

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 

Wenn jemand mich in die richtige Richtung zeigen könnte, ich würde es begrüßen.

Vielen Dank im Voraus.

+0

Was meinen Sie? Wenn Sie eine Liste erhalten möchten, müssen Sie "Groß-/Kleinschreibung auswählen, wenn ... von ..." auswählen und kein Ergebnis zurückgeben. Mit der Anweisung "set @ fno = (wähle fno from flights)" erhältst du das erste Ergebnis in zufälliger Reihenfolge. – inon

+0

Bitte bearbeiten Sie den Titel Ihrer Frage, um etwas zu bedeuten. – STLDeveloper

Antwort

0

Sie erhalten die Variablen (Einzelwerte) aus einem ausgewählten, so dass Sie nur das erste Ergebnis für @price erhalten und @fno

Sie sollten die Berechnung zur gleichen Zeit tun, als die Auswahl; und wahrscheinlich willst du kein varchar sondern einen tisch zurückgeben.

Beginnen Sie, auf Sätzen/Tabellen zu denken, nicht Standard-Datentypen Variablen; Sie können Variablen CTEs oder Tabelle verwenden, wenn Sie wollen, aber für SQL-Datenbanken, müssen Sie eine alternative Programmierparadigma

Mein allgemeiner Vorschlag so etwas wie wäre:

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

Vielen Dank für die Antwort, um ganz ehrlich zu sein Ich wusste nicht, Sie könnten wählen Fall auf diese Weise, die Dinge einfacher gemacht hätten: D – Sakis

0

Ich denke, dass Sie es zu komplizieren sind, und Sie nicht die gesamte Liste zurückgeben. Stattdessen benötigen Sie eine einfache Auswahl mit Ihrer Case-Anweisung.

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

wow, das war viel einfacher als ich dachte, vielen Dank für Ihre Antwort – Sakis

+0

Kein Problem @Sakis – scsimon

Verwandte Themen