2017-02-08 2 views
0

У меня есть 4 таблицы:Объединение несколько таблиц + HAVING условия

create table Hotel (
numHotel int primary key, 
nomHotel varchar(30), 
ville varchar(30), 
etoiles tinyint 
); 

create table Chambre (
numChambre int identity primary key, 
numHotel int foreign key references Hotel(numHotel), 
etage tinyint, 
prixnuit smallmoney not null check (prixnuit>=100) 
); 

create table Client (
cinClient varchar(10) primary key, 
nom varchar(30), 
prenom varchar(30), 
adresse varchar(255) default 'non renseignée', 
telephone varchar(10) check (telephone like '0%' and len(telephone)=10) 
); 

create table reservation (
numReservation int identity primary key, 
numChambre int foreign key references Chambre(numChambre), 
numCl varchar(10) foreign key references Client(cinClient), 
dateArrivee date, 
dateDepart date, 
constraint ck_dates check ((Datediff(day,dateArrivee,dateDepart)>0)) 
); 

имена столбцов французские, но я думаю, что они понятны.

Так что вопрос: мне нужно выбрать имена гостиниц (nomHotel), достигнув общей цены выше определенной цены (например, 10000)

Это то, что я сделал на бумаге:

select nomHotel from Hotel h join Chambre ch on h.numHotel=ch.numChambre join reservation r on ch.numChambre=r.numChambre 
group by nomHotel 
having COUNT(r.numChambre)*ch.prixnuit>10000 

И (конечно) Я понял это неправильно. Любая помощь приветствуется, спасибо.

перевод: «prixnuit» - это номер комнаты (chambre) за ночь.

ответ

0

Общий доход (я думаю) основан на количестве резервирований. Я думаю, вам нужно рассчитать количество ночей за бронирование, нет? Так, может быть:

select nomHotel, 
    sum(Datediff(day,r.dateArrivee,r.dateDepart)*ch.prixnuit) 
from Hotel h join Chambre ch on h.numHotel=ch.numChambre join reservation r  
on ch.numChambre=r.numChambre 
group by nomHotel 
having sum(Datediff(day,r.dateArrivee,r.dateDepart)*ch.prixnuit)>10000 
+0

Да, именно так. Огромное спасибо. – Outman

+0

@outman спасибо. Пожалуйста, отметьте принятый ответ \ –

+0

Выполнено. – Outman

0
select nomHotel, sum(Datediff(day,dateArrivee,dateDepart) * prixnuit) 
from Hotel h join Chambre ch on h.numHotel=ch.numHotel 
      join reservation r on ch.numChambre=r.numChambre 
group by nomHotel 
having sum(Datediff(day,dateArrivee,dateDepart) * prixnuit)>1000 
Смежные вопросы