Программы "Простой софт" www.prostoysoft.ru

ВНИМАНИЕ! РЕКЛАМНЫЕ СООБЩЕНИЯ И ГИПЕРССЫЛКИ В ФОРУМЕ ЗАПРЕЩЕНЫ (посты удаляются автоматически)
Текущее время: 23.11.2024 03:14

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
СообщениеДобавлено: 13.01.2016 10:23 
Не в сети

Зарегистрирован: 11.06.2015 10:59
Сообщения: 11
Доброго времени суток!
Помогите, пожалуйста сделать представление. Я справиться сам не могу.
Есть 4 таблицы: tblClient, tblAb, tblRb, tblTp.

В tblClient уникальное поле IDClient, к которому привязываются остальные таблицы,
В остальных таблицах эта запись (IDClient) может повторяться несколько раз (в зависимости от количества операций с данным клиентом).

Нужно представление вида:
IDClient, количество записей в таблице tblAb, количество записей в таблице tblRb, количество записей в таблице tblTp, поле E-mail из tblClient, поле Phone из tblClient, поле Name tblClient.

Желательно, чтобы оно обновлялось, например, раз в день)


Вложения:
2016-01-13 11-49-20 Скриншот экрана.png
2016-01-13 11-49-20 Скриншот экрана.png [ 17.15 КБ | Просмотров: 31785 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 13.01.2016 12:14 
Не в сети

Зарегистрирован: 13.09.2015 23:15
Сообщения: 115
Откуда: Санкт-Петербург
Сперва нужно сделать представление с выводом нужных полей из таблицы tblClient (SELECT IDClient, E-mail, Phone, Name FROM tblClient).
А далее видится 2 способа:
1) добавить в созданное представление вычисляемые поля AbCalc, RbCalc и TpCalc с примерной формулой: SELECT COUNT(IDClient) FROM tblAb WHERE IDClient = <IDClient>.
2) добавить в представление хранимые поля, сделать их "только для чтения", а заполнять через триггер, например, при открытии таблицы по примерному запросу: UPDATE qdfПредставление SET [Ab] = (SELECT COUNT(IDClient) FROM tblAb WHERE IDClient = qdfПредставление.IDClient).
Как-то так.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 13.01.2016 14:09 
Не в сети

Зарегистрирован: 11.06.2015 10:59
Сообщения: 11
seovet писал(а):
Как-то так.


Спасибо, попробую


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14.01.2016 11:14 
Не в сети

Зарегистрирован: 11.06.2015 10:59
Сообщения: 11
Создал хранимое поле (ибо вычисляемое очень нагружает базу). Но не получается решить вопрос с триггером обновления.
UPDATE qdfSale SET [Avia] = (SELECT COUNT(1) FROM tblNewAvia WHERE AviaID = <ClientID>) WHERE ClientID = <ClientID>
Как сделать, чтобы все записи в таблице обновились и получили уникальное значение?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14.01.2016 11:36 
Не в сети

Зарегистрирован: 25.04.2012 10:09
Сообщения: 2233
Откуда: Жуковский, Московская область
Используйте тип триггера "VBScript для всех", в условии указываете запрос, возвращающий необходимый набор записей данной таблицы. В теле триггера прописываете команду обновления, которая будет работать с каждой записью полученного набора.

_________________
90% ответов на ваши вопросы находятся в руководстве, разделах "Вопросы" и "Видео" на нашем сайте.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25.01.2016 12:38 
Не в сети

Зарегистрирован: 11.06.2015 10:59
Сообщения: 11
OMEN писал(а):
Используйте тип триггера "VBScript для всех", в условии указываете запрос, возвращающий необходимый набор записей данной таблицы. В теле триггера прописываете команду обновления, которая будет работать с каждой записью полученного набора.


Никак не выходит. Как же все таки посчитать COUNT? Пишет не определена переменная UPDATE

Настроено так:
КОГДА: При обновлении
ТИП: "VBScript для всех"
УСЛОВИЕ: КАКОЕ ТУТ НАПИСАТЬ УСЛОВИЕ? НУЖНО ЧТОБЫ ДЛЯ ДЛЯ ВСЕХ записей в этом представлении (qdfSale)
ТРИГГЕР: UPDATE qdfSale SET [Avia] = (SELECT COUNT(1) from tblNewAvia where AviaID = <ClientID>)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25.01.2016 12:43 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
Если задан ТИП: "VBScript...", то SQL-инструкцию надо выполнять так:
ExecuteSQL "UPDATE qdfSale SET [Avia] = (SELECT COUNT(1) from tblNewAvia where AviaID = <ClientID>)"

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB