Проблема в том, что ваши данные не нормализованы, что делает этот запрос более сложным.Одним из методов будет нормализация данных.Один из способов сделать это - в производной таблице;другое - структурировать таблицу, чтобы она была нормализована.
Поскольку комбинация статуса и вида спорта дает норму, данные не нормализуются, поскольку у вас есть два столбца ставок.
SELECT Name, Due
FROM A
INNER JOIN (SELECT Sport, 'Full' as Status, Full as Due FROM B UNION ALL
SELECT Sport, 'Discounted' as Status, Discounted as Due FROM B) B
on A.Activities = B.Sport
and A.Status = B.Status
Вместо таблицы, подобной этой:
Sport Full Discounted
Tennis 70 60
Badminton 110 90
Это нормализовано, поскольку вы можете добавлять виды спорта / ставки и новые ставки без изменения структуры.Если вам нужно было добавить новый тип тарифа в предыдущем формате, вы бы добавили таблицу.
Sport RateType Rate
Tennis Full 70
Tennis Discounted 60
Badminton Full 110
Badminton Discounted 90
Таким образом, вы можете добавлять спортивные ставки и различные тарифы без изменения кода.
Tennis Weekend 20
Complete Family 575
Технически у вас должна быть таблица RateType, в которой будут перечислены имя тарифа и идентификатор, чтобычто у вас может быть полный список всех доступных типов тарифов, которые затем могут быть привязаны к каждому виду спорта и $ курса по мере необходимости.Вы также можете показать, когда типы ставок были амортизированы, поэтому они не могут быть выбраны новыми, но позволяют существующим сохраняться.