2012-03-01 4 views
0

Вопрос SQL, возможно, не самый сложный.ПРИСОЕДИНИТЕСЬ к несвязанным таблицам по t1.date (между t2.startdate и t2.enddate)

Я делаю вид из связки связанной таблицы на ID -> легко. Теперь есть одна таблица, которая не имеет ключевой связи со всеми остальными. (BatchDates)

`ALTER VIEW [ECSUB].[FCT_Ext_Collection] 
AS 
SELECT  sh.id AS idSubmissionHistory, dh.id, dd.id AS Description, sch.id AS idScoringHistory, sh.CreationDate, sh.UpdateDate, bd.id AS BatchDateID 
FROM   ECSUB.SubmissionHistory AS sh INNER JOIN EC.DocumentHistory AS dh ON sh.id = dh.idSubmissionHistory 
         LEFT OUTER JOIN ECSM.ScoringHistory AS sch ON sh.idScoringHistory = sch.id 
         LEFT OUTER JOIN EC.DocumentDescriptions AS dd ON dd.id = dh.Description 
         LEFT OUTER JOIN ECSUB.AddressBilling AS ab ON sh.id = ab.id 
         LEFT OUTER JOIN ECSUB.AddressPremise AS ap ON sh.id = ap.id 
         CROSS JOIN EC.BatchDates AS bd --ON sh.documentdate between ....... 

GO` 

Ну, моя основная таблица «documentHistory» содержит дату документа, я должен определить, в которых партия этого падает. Каждая партия имеет идентификатор и дату начала. Пакет всегда один месяц.

Это сделает его гораздо легче понять, данные из BatchDates таблицы:

id month startdate 
1 2010-12-01 00:00:00.000 2010-12-01 00:00:00.000 
1 2011-01-01 00:00:00.000 2010-12-01 00:00:00.000 
1 2011-02-01 00:00:00.000 2010-12-01 00:00:00.000 
2 2011-03-01 00:00:00.000 2011-03-01 00:00:00.000 
2 2011-04-01 00:00:00.000 2011-03-01 00:00:00.000 
2 2011-05-01 00:00:00.000 2011-03-01 00:00:00.000 
3 2011-06-01 00:00:00.000 2011-06-01 00:00:00.000 
3 2011-07-01 00:00:00.000 2011-06-01 00:00:00.000 
3 2011-08-01 00:00:00.000 2011-06-01 00:00:00.000 
4 2011-09-01 00:00:00.000 2011-09-01 00:00:00.000 
4 2011-10-01 00:00:00.000 2011-09-01 00:00:00.000 
4 2011-11-01 00:00:00.000 2011-09-01 00:00:00.000 
5 2011-12-01 00:00:00.000 2011-12-01 00:00:00.000 
5 2012-01-01 00:00:00.000 2011-12-01 00:00:00.000 
5 2012-02-01 00:00:00.000 2011-12-01 00:00:00.000 
6 2012-03-01 00:00:00.000 2012-03-01 00:00:00.000 
6 2012-04-01 00:00:00.000 2012-03-01 00:00:00.000 
6 2012-05-01 00:00:00.000 2012-03-01 00:00:00.000 
7 2012-06-01 00:00:00.000 2012-06-01 00:00:00.000 
7 2012-07-01 00:00:00.000 2012-06-01 00:00:00.000 
7 2012-08-01 00:00:00.000 2012-06-01 00:00:00.000 
8 2012-09-01 00:00:00.000 2012-09-01 00:00:00.000 
8 2012-10-01 00:00:00.000 2012-09-01 00:00:00.000 
8 2012-11-01 00:00:00.000 2012-09-01 00:00:00.000 
9 2012-12-01 00:00:00.000 2012-12-01 00:00:00.000 
9 2013-01-01 00:00:00.000 2012-12-01 00:00:00.000 
9 2013-02-01 00:00:00.000 2012-12-01 00:00:00.000 
10 2013-03-01 00:00:00.000 2013-03-01 00:00:00.000 
10 2013-04-01 00:00:00.000 2013-03-01 00:00:00.000 
10 2013-05-01 00:00:00.000 2013-03-01 00:00:00.000 
etc........... 

Так что мне нужно принести batchID на основе documentdate, поэтому мы используем currentMonth колонны Дата начала.

Таким образом: ... РЕГИСТРИРУЙТЕСЬ BatchDates где documentDate не находится в startDate.month (нет между здесь)

Я даже не знаю, если мне нужно присоединиться, перекрестное соединение, объединение, и т.д. ...

Заранее благодарен! L

ответ

1
join BatchDates 
on datepart(yyyy,[document date]) = datepart(yyyy,[startDate]) 
and datepart(mm,[document date]) = datepart(mm,[startDate]) 
+0

хорошо выглядит! Я попробую и расскажу здесь. Спасибо!! – laurens

+0

Хорошо, это работает шарм ... также с внутренним/внешним соединением. СПАСИБО ! – laurens

Смежные вопросы