Для начала: столбец называется ID
, поскольку он однозначно идентифицирует запись в таблице.Поскольку в вашей таблице есть дубликаты идентификаторов, это, очевидно, идентификаторы другой таблицы, и их следует называть так.
В любом случае, вы хотите, чтобы все идентификаторы, которые вы найдете в таблице, объединялись со всеми месяцами, которые вы найдете в таблице.Это будет перекрестное соединение:
select ids.id, yearmonths.yearmonth
from (select distinct id from mytable) ids
cross join (select distinct yearmonth from mytable) yearmonths;
(Обратите внимание: я использую различные варианты выбора из вашей таблицы, потому что вы не показывали нам другие таблицы. Если есть родительская таблица, содержащая уникальные идентификаторы, тоЯ бы предпочел использовать это. То же самое для YearMonths: если есть таблица YearMonth, используйте ее вместо того, чтобы собирать различные значения из таблицы комбинации.)
Однако вы говорите, что не хотите выбиратьтолько эти, но вставьте отсутствующие записи в таблицу.
insert into mytable (id, yearmonth)
select ids.id, yearmonths.yearmonth
from (select distinct id from mytable) ids
cross join (select distinct yearmonth from mytable) yearmonths
except
select id, yearmonth from mytable;
В HANA вы можете сократить это значение до:
upsert mytable
select ids.id, yearmonths.yearmonth
from (select distinct id from mytable) ids
cross join (select distinct yearmonth from mytable) yearmonths;
Это только вставляет новые строки, потому что все выбранные столбцыявляются частью первичного ключа таблицы.