Subselect Anweisung Hilfe

mazaka

Neuer Benutzer
Beiträge
1
Hallo,

also Problem ist folgendes:
Wir haben eine SQL-Datenbank "Hotel" mit folgenden Tabellen und Feldern:
1. Buchung:
- Buchungsnr (Primärschlüssel, auto-inc)
- Zimmernummer
- belegtVon
- belegtBis

2. Zimmer:
- Zimmernummer (Primärschlüssel)
- Kategorie


So, nun zum eigentlichen Problem:
Ich brauche eine SELECT-Abfrage, die mir die freien Zimmer ab heute bis zum 31.12.2011 zurück gibt und mir dabei auch den Zeitraum nennt an dem das Zimmer frei sein wird. Arbeiten tue ich mit dem "Microsoft SQL Server Management".



Als Lösung habe ich bereits folgendes realisiert:
Code:
select *,
  FREIVON_DAVOR = isnull((select convert(varchar,dateadd(D,1,BELEGTBIS),104) from BUCHUNG bu where bu.ZIMMERNUMMER=subsel1.ZIMMERNUMMER and convert(numeric,bu.BUCHUNGNR) = convert(numeric,subsel1.BUCHUNGNR) - 1),'01.01.2011'),
  FREIBIS_DAVOR = convert(varchar,dateadd(D,-1,subsel1.belegtvon),104),
  FREIVON_DANACH = convert(varchar,dateadd(D,1,subsel1.belegtbis),104),
  FREIBIS_DANACH = isnull((select convert(varchar,BELEGTVON,104) from BUCHUNG bu where bu.ZIMMERNUMMER=subsel1.ZIMMERNUMMER and convert(numeric,bu.BUCHUNGNR) = convert(numeric,subsel1.BUCHUNGNR) + 1),'31.01.2011')
from (
  select z.ZIMMERNUMMER,z.KATEGORIE,b.BUCHUNGNR,b.BELEGTVON,b.BELEGTBIS
  from ZIMMER z
  left join BUCHUNG b on b.ZIMMERNUMMER=z.ZIMMERNUMMER
) subsel1

Das Problem bei meiner Abfrage ist, das ich davon ausgehe, das die Buchungsnummer je Zimmer vergeben wird. (immer +1). In der Datenbank werden die Buchungsnr. aber zufällig verteilt.
28hmxjp.jpg


Kann mir dabei jemand aus der Community vielleicht helfen? Komme da leider nicht weiter.

Danke schonmal im Voraus!
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.702
Das sieht kompliziert aus aber gehe ich recht in der Annahme, das du schwirigkeiten bekommst wenn ein Zimmer erst frei, dann gebucht, dann frei, dann wieder gebucht und wieder frei ist? Dann würde er doch 2 Einträge anzeigen bei der die jeweils andere Buchung in einer FREIDAVOR oder FREIDANACH Periode liegt.
 

Gadolfo

Neuer Benutzer
Beiträge
1
Genau richtig, dann gibt es Schwierigkeiten.

Das mit den 2 Einträgen für jeweils eine andere Buchung verstehe ich nicht.

Aber es wäre natürlich ideal, wenn die Ausgabe z.B. so wäre.

01.01.2010 - 11.08.2010 - 15.08-2010 - 30.01.2011

15.08.2010 - 30.01.2011 - 02.02.2011 - 31.12.2011

So würde jeweils Datensatz 1 und 2 aufeinander Bezug nehmen, aber ob das realisierbar ist, ist halt meine Frage, aber vllt fällt einem anderen noch eine andere Darstellung bzw. Lösungsform hier ein!
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.702
Ideal wäre eine Kalenderübersicht wie in Outlook (auch wenn es eine gemeine Software ist). Nur so wäre man schnell in der Lage, Zimmer optimal zu belegen. Es ist ja nicht nur Ziel, freie Zimmer zu finden, sondern auch möglichst lückenlos zu vermieten.
 
Oben