SQL показать свободные, забронированные и отмененные места - PullRequest
0 голосов
/ 04 мая 2020

В основном мне нужно показать количество забронированных, отмененных и доступных мест для поезда.

У меня есть это для доступных мест:

 SELECT t.trainid, t.maxcapacity - coalesce(sum(b.numseats), 0) as availableseats 
FROM Train t
left JOIN TrainBooking b
ON t.TrainID = b.TrainID
WHERE b.Status IN ('r')
GROUP BY t.TrainID , t.maxcapacity 

В таблице железнодорожных билетов у меня есть столбец с названием "статус". Статус либо зарезервирован, либо отменен. Мне нужно отобразить зарезервированные и отмененные места с доступными местами, но я не уверен, как это сделать.

Пример данных двух таблиц:

Поезд:

TrainId maxseats 
1        10
2        10

Обучение поезду:

bookingid  trainid status   numseats 
1            1      'r'       2
2            1      'c'       2
3            2      'r'       3

Результаты:

trainid availableseats  cancelledseats reservedseats
1           8                2             2
2           7                0             3

Я новичок в SQL, поэтому любая помощь будет оценена - спасибо.

1 Ответ

0 голосов
/ 04 мая 2020

Попробуйте следующее, вот демоверсия .

select
    trainId,
    (maxSeats - reservedSeats) as availableSeats,
    cancelledSeats,
    reservedSeats
from
(
  select
    t.trainId,
    maxSeats,
    sum(case when status = 'c' then numseats else 0 end) as cancelledSeats,
    sum(case when status = 'r' then numseats else 0 end) as reservedSeats
  from train t
  join trainBooking tb
  on t.trainId = tb.trainId
  group by
      t.trainId,
      maxSeats
) vals  
order by
    trainId

Вывод:

| trainid | availableSeats | cancelledSeats| reservedSeats |
| ------- | -------------- | ------------- | ------------- |
| 1       | 8              | 2             | 2             |
| 2       | 7              | 0             | 3             |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...