Как создать в select_query Inner JOIN без привязки к точным данным?

Необходимо реализовать в Террасофт следующий INNER JOIN

FROM tbl_Contract c
INNER JOIN tbl_ContractReportMonth m ON c.StartDate BETWEEN m.DateFrom AND m.DateTo

так, чтобы в Select потом была возможность обращаться к полям таблицы tbl_ContractReportMonth

Как это можно сделать?

Нравится

10 комментариев

я думаю, Вам придется решать Вашу задачу подзапросами (если надо иметь данные именно в том же датасете)

Андросов Дмитрий
Что значит подзапросы? Где это находится? (Я работаю с ТерраСофт всего вторую неделю)

Заранее спасибо!

Подзапрос - это, например, второй 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-а можно выбрать при его настройке:

111

Для того, чтобы добавить новый JOIN нужно на существующую таблицу нажать правой кнопкой мыши, и добавить его.

111

В некоторых случаяых удобнее действительно использовать и колонки подзапроса, как рекомендовал Дмитрий, например, когда Вам нужны агрегирующие значения по связанным таблицам.

В традиционном случае, например, при выводе заголовка значения справочника в запрос, рекомендуется использование 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

С точки зрения СУБД по идее результат должен быть аналогичным.

Но мне вариант Ани нравится больше.

Показать все комментарии