|
|
Veröffentlicht am 06.12.2018 17:00:58
|
Dieser Beitrag wurde zuletzt von Miaolinsen am 6.12.2018 um 17:03 Uhr bearbeitet
Ich habe es nicht mit MySQL gemacht, sondern mit mssql:
/* Geben Sie den Zeitraum und die Anzahl der zu buchenden Zimmer an, fragen Sie die Hotels, Zimmertypen und deren Durchschnittspreise ab, die den Bedingungen entsprechen (Zeit, Anzahl der verbleibenden Zimmer), und sortieren Sie sie nach Durchschnittspreis von niedrig bis höchst. Die Ergebnisse umfassen Hotels, ausgewählte Zimmerkombinationen und -mengen sowie den niedrigsten Durchschnittspreis. ##不要求为同一房型, aber es muss dasselbe Hotel sein, und du kannst den Zimmertyp mittendrin ändern. -- Parsing: Das bedeutet, dass der Raumtyp nicht berücksichtigt werden muss, sondern nur die Anzahl der Räume berücksichtigt wird ##比如, wählen Sie die Check-in-Zeit 2018-11-14~2018-11-15, und die Anzahl der gebuchten Zimmer beträgt 5 -- Analyse: Das Hotel muss im Datumsbereich liegen, und es gibt täglich eine Nachfrage nach der Anzahl der Zimmer (wenn an einem bestimmten Tag niemand da ist, erfüllt es den Standard nicht) ##返回选择酒店A, 11-14 wählen Sie 4 Zimmertypen mit ID 3, 1 Zimmertyp mit ID 2, 11-15 wählen Sie 3 Zimmertypen mit ID 3, 2 Zimmertypen mit ID 2, und der niedrigste Preis ist 2000 – Analyse: Berechnen Sie den Durchschnittspreis entsprechend der Mindestkonfiguration pro Tag ##老师要求只能用sql语句, MySQL-Implementierung, kann Python, C++ usw. nicht verwenden. */
-- Eingehende Parameter, Datumsbereich, Anzahl der benötigten Zimmer GIB @sdate DATUM AN = '2018-11-14'; GEBEN SIE @edate DATUM AN = '2018-11-15'; DEKLARIEREN @roomnum INT = 5;
-- Berechnen Sie die Anzahl der Aufenthaltstage DECLARE @days INT; SETZE @days = DATEDIFF(TAG, @sdate, @edate)+1;
-- Hotelnummer, die die Datumsspanne erfüllt, Anzahl der Zimmer IF EXISTS(select * aus tempdb.dbo.sysobjects, wobei id = object_id(N'tempdb.. ##temp_hotel') und typ='U') BEGINN Drop-Tabelle ##temp_hotel ENDE
WÄHLE ta.hotel_id IN ##temp_hotel AUS (SELECT ri. [Datum], rt.hotel_id, SUM(ri.remain) room_num VON room_info ri links VERBINDEN room_type rt auf ri.room_id=rt.room_id wobei @sdate <= [Datum] und [Datum] <= @edate GRUPPE NACH ri angeben. [Datum],rt.hotel_id MIT SUMM(REMAIN) >= 5) ta GRUPPE NACH ta.hotel_id MIT ZAHL(*) = @days
-- Berechnet gemäß dem Hotel (konfigurieren Sie den Mindestraumtyp pro Tag)
IF EXISTS(select * aus tempdb.dbo.sysobjects, wobei id = object_id(N'tempdb.. ##temp_result') und typ='U') BEGINN Drop-Tabelle ##temp_result ENDE -- Vorläufige Ergebnistabelle Hoteldatum Zimmertyp ID Zimmertyp Name Anzahl der Zimmer Preis Hotel Tagesgesamt Hoteldurchschnittlicher Hotelpreis Gesamt Hotelpreis Hotel Gesamt Hotelpreis Gesamt Tagesdurchschnittspreis Hotel Gesamt Tagesdurchschnittspreis des Hotels Gesamt Tagespreis TABELLE ERSTELLEN ##temp_result( hotel_id INT, hotel_name Varchar(255), [Datum] DATE, room_id INT, room_name VARCHAR (255), room_num INT, Zimmerpreis DECIMAL, dsumprice DECIMAL, davgprice DECIMAL, Sumprische DEZIMAL, SUMAVGPRIC DEZIMAL
)
ERKLÄREN @hid INT; -- Hotel-ID DECLARE @infoid INT; -- Info-ID --bestätigen, dass der Cursor eine Sammlung ist DECLARE my_cursor Cursor für (SELECT hotel_id aus ##temp_hotel); --Öffne den Cursor-- Öffne my_cursor --Start-Schleifen-Cursorvariablen-- Hol als Nächstes von my_cursor in @hid während @@FETCH_STATUS = 0 – den Zustand des zuletzt von der FETCH-Anweisung ausgeführten Cursors zurückgibt -- BEGINN -- Basierend auf der Hotel-ID wird das wiederkehrende Datum bepreist IF EXISTS(select * aus tempdb.dbo.sysobjects, wobei id = object_id(N'tempdb.. ##temp_room') und tipp='U') BEGINN Drop-Table ##temp_room ENDE
-- Hotels nach Datum, mit den nach Datum sortierten Zimmern Tarif WÄHLEN SIE info_id, [Datum], Preis, Remain, room_id IN ##temp_room VON dbo.room_info AUS, WOBEI @sdate <= [Datum] und [Datum] <= @edate BLEIBEN UND > 0 BLEIBEN UND room_id IN (WÄHLEN SIE rt.room_id AUS dbo.room_type rt WO rt.hotel_id=@hid) NACH [Datum] ASC, Preis ASC
DEKLARIEREN @thisrdate DATUM = NULL; -- Datum DECLARE @thisrnum INT=0; -- Anzahl der am aktuellen Datum ausgewählten Zimmer
DEKLARIEREN @rdate DATUM = NULL; -- Datum DECLARE @rmnum INT = 0; -- Anzahl der Zimmer nach Raumtyp
-- Zyklus nach Datum DEKLARIEREN @my_cursor2 CURSOR; Set @my_cursor2 = CURSOR FÜR AUSGEWÄHLTE info_id AUS ##temp_room ORDNUNG NACH [DATUM] ASC, PREIS ASC ÖFFNE @my_cursor2; HOL ALS NÄCHSTES VON @my_cursor2 IN @infoid WHILE(@@FETCH_STATUS=0) BEGINN --##temp_result WÄHLEN SIE @rmnum=bleiben, @rdate=[Datum] AUS ##temp_room WO info_id=@infoid WENN (@thisrdate NULL IST ODER @thisrdate != @rdate) BEGINN DRUCKEN @rdate SETZE @thisrdate = @rdate; SET @thisrnum = 0; ENDE -- Typ des Raums zur Auswahl der Dosierungsform WIF(@thisrnum <= @roomnum) BEGINN WENN (@thisrnum + @rmnum > @roomnum) BEGINN -- Die Anzahl der Räume, die du benutzen musst SET @rmnum = @roomnum-@thisrnum; ENDE ENDE ODER BEGINN -- Für dieses Datum ist kein Platz erforderlich. SETZE @rmnum = 0; ENDE
IF (@rmnum > 0) BEGINN -- Ergebnisse nach angegebener Zahl addieren EINFÜGEN IN ##temp_result(hotel_id, hotel_name, [Datum], room_id, room_name, room_num, Roomprice, Dsumprice, davgprice, Sumpric, Sumavgpric) WÄHLE @hid, '', @thisrdate, room_id, '', @rmnum, preis, 0, 0, 0, 0 AUS ##temp_room WOBEI info_id = @infoid
-- Die Anzahl der Zimmer hat den berechneten Durchschnittspreis erreicht SETZE @thisrnum = @thisrnum + @rmnum; WENN (@thisrnum = @roomnum) BEGINN -- Gesamtpreis nach Hotel, berechnet für Daten AKTUALISIERUNG ##temp_result SETZE dsumprice=(SELECT SUM(room_num*roomprice) AUS ##temp_result tr WO tr.hotel_id=@hid UND tr.[ datum]=@thisrdate) WOBEI hotel_id=@hid UND [Datum]=@thisrdate -- Berechnen Sie den durchschnittlichen Zimmerpreis nach Hotel, Gesamtpreis nach Datum AKTUALISIERUNG ##temp_result SETZE davgprice=(dsumprice/@roomnum) WO hotel_id=@hid UND [date]=@thisrdate ENDE ENDE
ALS NÄCHSTES HOLEN SIE VON @my_cursor2 IN @infoid; ENDE nahe @my_cursor2; --Schalte den Cursor aus Deal locate @my_cursor2; --Release-Cursor
-- Nach Hotel, berechnet den Gesamtpreis des Hotels UPDATE ##temp_result SETZE SUMPRIC=(SELECT SUM(room_num*roomprice) AUS ##temp_result tr WO tr.hotel_id=@hid) WO hotel_id=@hid -- Berechnen Sie den durchschnittlichen Tagespreis des gesamten Zimmers im Hotel AKTUALISIERUNG ##temp_result SETZE sumavgpric=(sumpric/@roomnum/@days) WO hotel_id=@hid
FETCH als nächstes von my_cursor in @hid – zum nächsten Cursor gehen, keine Deadloops ENDE schließen my_cursor – schließen Sie den Cursor Deallocate my_cursor – den Cursor loslassen
-- Fügen Sie den Hotelnamen und den Zimmertyp zur temporären Tabelle hinzu UPDATE ##temp_result SETZE hotel_name=(SELECT ht.hotel_name FROM dbo.hotel ht WO ht.hotel_id=##temp_result.hotel_id), room_name=(WÄHLE rt.room_name AUS dbo.room_type RT AUS, WO rt.room_id=##temp_result.room_id)
-- Überprüfen Sie die Ergebnisse in der Ergebnistabelle WÄHLEN SIE * AUS ##temp_result
-- Beenden des Leerens temporärer Tabellen IF EXISTS(select * aus tempdb.dbo.sysobjects, wobei id = object_id(N'tempdb.. ##temp_hotel') und typ='U') BEGINN Drop-Tabelle ##temp_hotel ENDE IF EXISTS(select * aus tempdb.dbo.sysobjects, wobei id = object_id(N'tempdb.. ##temp_room') und tipp='U') BEGINN Drop-Table ##temp_room ENDE IF EXISTS(select * aus tempdb.dbo.sysobjects, wobei id = object_id(N'tempdb.. ##temp_result') und typ='U') BEGINN Drop-Tabelle ##temp_result ENDE
|
Punktzahl
-
Alle Bewertungen sehen
|