-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4


Сложный запрос с подзапросами

Четверг, 26 Июня 2014 г. 13:13 + в цитатник
Приветствую!
Комрады, прошу помощи, так как сам я на поиск решения убил уже много дней. Прикладываю кусок базы с нужными таблицами и тестовыми данными и картинку, показывающую структуру и результирующий запрос, который мне нужно получить (обведен жирной рамкой. Запрос один, перенес для экономии места.
Несколько комментариев:
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


 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку