2016-11-02 4 views
0

С PeriodID, FromDate, Todate .... Тогда я еще один называется «Сделка»SQL View, чтобы объединить две таблицы, которые не имеют никакой связи

с TXID, txDate, дебет, кредит ... эти таблицы готовые к определенной программе, и я не могу их изменить.

Так что я хочу знать, есть ли способ поиска таблицы периодов с помощью txDate из Transaction, тогда, если txDate находится между fromDate и toDate определенного периода, я хочу, чтобы представление, которое объединяет транзакцию, и просто добавляет PeriodID.

+3

Просьба предоставить образцы данных обеих таблиц и желаемый результат – GuidoG

ответ

0

Без выборочных данных всегда сложно ответить на эти вопросы. Но предположим, что я правильно понял вас ...

Вы можете использовать between для объединения этих двух таблиц.

Это объединение вернет период, охватывающий дату транзакции.

-- Join without a matching field. 
SELECT 
    * 
FROM 
    [Transaction] AS t 
     INNER JOIN [Period] AS p  ON t.txDate BETWEEN p.fromDate AND p.toDate 
; 
+0

Да, вы поняли меня правильно, это именно то, чего я хотел. –

0

Попробуйте это, оно адаптировано для вашего вопроса?

SELECT * 
FROM Transaction 
WHERE EXISTS 
(
SELECT 1 FROM Period WHERE txDate BETWEEN fromDate AND ToDate 
) 
+0

Будьте внимательны при обращении к внешнему запросу из подзапроса. Это называется [коррелированным подзапросом] (https://en.wikipedia.org/wiki/Correlated_subquery). Эти типы запросов могут снизить производительность, поскольку SQL Server вынужден переоценивать подзапрос один раз для каждой строки, возвращаемой внешним запросом. –