Я предоставлю примеры и код, где смогу. Предположим, что все, кроме типов данных [CycleStart] и [CycleEnd], являются Varchar, на данном этапе я не особо беспокоюсь об этом.
Таблица A состоит из следующих образцов данных RAW:
+-------+---------+----------------+------------+------------+
| JobID | JobName | CycleDesc | CycleStart | CycleEnd |
+-------+---------+----------------+------------+------------+
| 10003 | Run1 | January 2019 | 31/12/2018 | 31/12/2018 |
| 10005 | Run2 | December 2018 | 31/12/2017 | 31/11/2018 |
| 10006 | Run3 | March 2019 | 31/12/2018 | 31/02/2019 |
| 10007 | Run4 | September 2019 | 31/12/2018 | 31/09/2019 |
| 10008 | Run5 | November 2019 | 31/12/2018 | 31/10/2019 |
+-------+---------+----------------+------------+------------+
Таблица B состоит из следующих образцов данных и кода, используемого для сгенерируйте эти данные ниже:
+-------+---------+---------+
| JobID | PeriodID | Entity |
+-------+---------+---------+
| 10003 | 202101 | XYZ1 |
| 10003 | 202112 | XYZ2 |
| 10007 | 202008 | XYZ3 |
| 10007 | 202003 | XYZ4 |
| 10008 | 201904 | XYZ5 |
+-------+----------+--------+
Declare @Counter3 INT
SELECT @Counter3=1
WHILE @Counter3 <= 1000
BEGIN
INSERT INTO [dbo].[TableB]
SELECT
FLOOR(RAND()*(33979-1+1))+1 [JobID]
,CAST(ROUND(((2021 - 2019 -1) * RAND() + 2020), 0) AS VARCHAR) + RIGHT('0'+CAST(FLOOR(RAND()*(12-1+1))+1 AS VARCHAR),2) [PeriodID]
,FLOOR(RAND()*(23396-1+1))+1 [Entity]
Проблема находится в столбце таблицы B [PeriodID]. Этот столбец представляет собой идентификатор, сгенерированный из [CycleStart] в таблице A, например, 31/12/2018 = 201812 (ГГГГММ).
То, что я хочу показать в Таблице B - это идентификатор периода для каждого идентификатора задания, но показать КАЖДЫЙ месяц + 30 лет до даты [CycleStart]. Примерная таблица того, чего я хочу достичь:
+-------+---------+---------+
| JobID | PeriodID | Entity |
+-------+---------+---------+
| 10006 | 201812 | XYZ1 |
| 10006 | 201901 | XYZ2 |
| 10006 | 201902 | XYZ3 |
| 10006 | 201903 | XYZ4 |
| 10006 | 201904 | XYZ5 |
| 10006 | 201905 | XYZ5 |
| 10006 | 201906 | XYZ5 |
| 10006 | 201907 | XYZ5 |
| ... | +30yrs | ... |
| 10006 | 204812 | XYZ5 |
+-------+----------+--------+
Как я могу этого добиться? В настоящее время я просто произвольно генерирую идентификаторы, которые не связаны с датой [CycleStart], и поэтому просто искажаю мои данные, но это единственный способ, которым я могу это сделать.