Приветствую!
Комрады, прошу помощи, так как сам я на поиск решения убил уже много дней. Прикладываю кусок базы с нужными таблицами и тестовыми данными и картинку, показывающую структуру и результирующий запрос, который мне нужно получить (обведен жирной рамкой. Запрос один, перенес для экономии места.
Несколько комментариев:
1. refer формируется в зависимости от признака пола (tblClients.sex). Для каждого offer_id всегда есть запись.
Для tblClients.sex=1 - tblOffPersRefer.persReferM + tblClients.client_name + tblClients.client_midname
для tblClients.sex=2 - tblOffPersRefer.persReferF + tblClients.client_name + tblClients.client_midname
для tblClients.sex=0 - tblOffPersRefer.persReferNot
2. tblOffParams. Содержит параметры для клиентов для определенных offer_id. Не для всех offer_id есть клиенты с параметрами.
3. tblOffAction (самое сложное)
Данные транспонируются из таблицы tblOffAction в зависимости от признака пола (tblClients.sex). Пример на картинки. Для пола 0 и 1 данные идентичны (tblOffAction.action_textM).
4. Фильтр отбора для запроса - offer_id.
Сложность для меня в том, что нужно использовать вложенные запросы, для транспонирования некоторых данных активно использовать альясы... В общем на текущий момент я решил только часть задачи
Вытащил обращение + имя отчество в строку
| + |
SELECT tblClients.client_id,
t1.action_textF AS action_text_yes,
t2.action_textF AS action_text_not,
t3.action_textF AS action_text_notnow
FROM
tblOffActions AS t1,
tblOffActions AS t2,
tblOffActions AS t3,
tblOffers INNER JOIN tblClients ON tblOffers.client_id = tblClients.client_id
WHERE
tblClients.sex="2"
AND t1.action_id=1
AND t2.action_id=2
AND t3.action_id=3
AND tblOffers.offer_id=99
AND t1.offer_id=99
AND t2.offer_id=99
AND t3.offer_id=99
UNION
SELECT tblClients.client_id,
t1.action_textM AS action_text_yes,
t2.action_textM AS action_text_not,
t3.action_textM AS action_text_notnow
FROM
tblOffActions AS t1,
tblOffActions AS t2,
tblOffActions AS t3,
tblOffers INNER JOIN tblClients ON tblOffers.client_id = tblClients.client_id
WHERE
tblClients.sex NOT LIKE "2"
AND t1.action_id=1
AND t2.action_id=2
AND t3.action_id=3
AND tblOffers.offer_id=99
AND t1.offer_id=99
AND t2.offer_id=99
AND t3.offer_id=99
|
Пришить к нему поля с параметрами (tblOffParams) с учетом того, что не для всех клиентов есть поля, не получается.
Очень прошу помощи!
_____________________
А что на самом деле хотел сказать Frost_Imp никто не знает, так как администрация форума попросила его быть вежливым. http://www.sql.ru/forum/1102241/slozhnyy-zapros-s-podzaprosami