Как создать в select_query Inner JOIN без привязки к точным данным?
Необходимо реализовать в Террасофт следующий INNER JOIN
INNER JOIN tbl_ContractReportMonth m ON c.StartDate BETWEEN m.DateFrom AND m.DateTo
так, чтобы в Select потом была возможность обращаться к полям таблицы tbl_ContractReportMonth
Как это можно сделать?
Нравится
я думаю, Вам придется решать Вашу задачу подзапросами (если надо иметь данные именно в том же датасете)
Андросов Дмитрий
Что значит подзапросы? Где это находится? (Я работаю с ТерраСофт всего вторую неделю)
Заранее спасибо!
Подзапрос - это, например, второй select в следующем запросе
SELECT [tbl_Account].[ID] AS [ID], [tbl_Account].[Name] AS [Name], [tbl_Account].[OfficialAccountName] AS [OfficialAccountName], [tbl_Account].[AnnualRevenue] AS [AnnualRevenue], (SELECT [tbl_Empty].[column5] FROM [dbo].[tbl_Empty] AS []) AS [PODZAPROS] FROM [dbo].[tbl_Account] AS [tbl_Account] where ......
в Администраторе подзапросы добавляются так
Здравствуйте, Наталия!
Тип Join-а можно выбрать при его настройке:
Для того, чтобы добавить новый JOIN нужно на существующую таблицу нажать правой кнопкой мыши, и добавить его.
В некоторых случаяых удобнее действительно использовать и колонки подзапроса, как рекомендовал Дмитрий, например, когда Вам нужны агрегирующие значения по связанным таблицам.
В традиционном случае, например, при выводе заголовка значения справочника в запрос, рекомендуется использование Join-ов в блоке FROM
Анна, обратите внимание на условие JOIN'a, которое нужно Наталии
В том то и дело, что у меня нет прямой связки, соединение данных - это условие попадания в диапазон.
Со стандартным JOIN проблем бы не было.
Дмитрий, Вы абсолютно правы, в данном конкретном случае на уровне sq_ задачу можно решить только колонкой подзапроса.
Однако с точки зрения оптимизации и ускорения запроса я бы рекомендовала создать представление, которое бы ограничивало tbl_ContractReportMonth по датам, зарегистрировать его в Terrasoft как таблицу и джоинить. Правда, это допустимо только в том случае, если пределы можно задать неким выражением от текущей даты. Если они задаются в системе в ручную - тогда колонки подзапроса.
Наталия,
можете вместо INNER JOIN создать CROSS JOIN, а условия соединения заменить на условия фильтрации, типа:
FROM tbl_Contract c CROSS JOIN tbl_ContractReportMonth m WHERE c.StartDate BETWEEN m.DateFrom AND m.DateTo
С точки зрения СУБД по идее результат должен быть аналогичным.
Но мне вариант Ани нравится больше.