СОЕДИНЯЙТЕ несвязанные таблицы по t1.date (между t2.startdate и t2.enddate) - PullRequest
0 голосов
/ 01 марта 2012

SQL-вопрос, наверное, не самый сложный.

Я делаю вид из связки связанных таблиц по идентификаторам -> просто. Теперь есть одна таблица, которая не имеет ключевых отношений со всеми остальными. (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 на основе даты документа, поэтому мы используем currentMonth начальной даты столбца.

Таким образом: ... JOIN BatchDates, где documentDate находится в startDate.month (между ними нет)

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

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

1 Ответ

1 голос
/ 01 марта 2012
join BatchDates 
on datepart(yyyy,[document date]) = datepart(yyyy,[startDate])
and datepart(mm,[document date]) = datepart(mm,[startDate])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...