DECLARE @Id INT = (SELECT MAX([ID]) FROM [IdentNr_Gruppendetail]); INSERT INTO [IdentNr_Gruppendetail] ([ID], [Name]) OUTPUT [Inserted].[ID], [Inserted].[Name] SELECT ROW_NUMBER() OVER(ORDER BY [Name]) + @Id AS [ID] , [Gruppendetail].[Name] AS [Name] FROM (SELECT DISTINCT [IdNrName].[Name] FROM (SELECT [Identnr].[IdentNr] , [Identnr].[Typ] , 'WSD ' + CASE WHEN [Identnr].[Nennweite] IS NOT NULL THEN CAST([Identnr].[Nennweite] AS VARCHAR) ELSE '0' END + ' / ' + CASE WHEN [Identnr].[Temperatur] IS NOT NULL THEN CAST([Identnr].[Temperatur] AS VARCHAR) ELSE '0' END + '°' AS [Name] FROM [Identnr] WHERE [Typ] LIKE '%WSD%') AS [IdNrName] LEFT JOIN [IdentNr_Gruppendetail] ON [IdentNr_Gruppendetail].[Name] = [IdNrName].[Name] WHERE [IdentNr_Gruppendetail].[ID] IS NULL) AS [Gruppendetail] SET @Id = (SELECT MAX([ID]) FROM [IdentNrGruppierung]); SET IDENTITY_INSERT [IdentNrGruppierung] ON; INSERT INTO [IdentNrGruppierung] ( [IdentNr] , [GruppenID] , [ID]) SELECT [MissingIdentNr].[IdentNr] , [MissingIdentNr].[GruppenID] , [MissingIdentNr].[ID] FROM (SELECT [IdentNrNames].[IdentNr] AS [IdentNr] , [IdentNr_Gruppendetail].[ID] AS [GruppenID] , ROW_NUMBER() OVER(ORDER BY [IdentNrNames].[IdentNr]) + @Id AS [ID] FROM (SELECT [Identnr].[IdentNr] , [Identnr].[Typ] ,'WSD ' + CASE WHEN [Identnr].[Nennweite] IS NOT NULL THEN CAST([Identnr].[Nennweite] AS VARCHAR) ELSE '0' END + ' / ' + CASE WHEN [Identnr].[Temperatur] IS NOT NULL THEN CAST([Identnr].[Temperatur] AS VARCHAR) ELSE '0' END + '°' AS [Name] FROM [Identnr] WHERE [Typ] LIKE '%WSD%') AS [IdentNrNames] LEFT JOIN [IdentNr_Gruppendetail] ON [IdentNr_Gruppendetail].[Name] = [IdentNrNames].[Name] LEFT JOIN [IdentNrGruppierung] ON [IdentNrGruppierung].[IdentNr] = [IdentNrNames].[IdentNr] WHERE [IdentNrGruppierung].[IdentNr] IS NULL ) AS [MissingIdentNr] SET IDENTITY_INSERT [IdentNrGruppierung] OFF; SELECT [IdentNrGruppierung].[IdentNr] AS [IdentGroupirungNr] , [Identnr].[IdentNr] , [Identnr].[KurzBez] , [Identnr].[Typ] , [Identnr].[Nennweite] , [Identnr].[Temperatur] , [Identnr].[Druck] , [Identnr].[Baulaenge] , [IdentNr_Gruppendetail].[Name] , [IdentNr_Gruppendetail].[ID] AS [IdNrGruppenDetailId] , [IdentNrGruppierung].[GruppenID] AS [IdentNrGruppierungGruppenId] , [IdentNrGruppierung].[ID] AS [IdentNrGruppierungId] , [Identnr].[AnlageDatum] FROM [Identnr] LEFT JOIN [IdentNrGruppierung] ON [IdentNrGruppierung].[IdentNr] = [Identnr].[IdentNr] LEFT JOIN [IdentNr_Gruppendetail] ON [IdentNr_Gruppendetail].[ID] = [IdentNrGruppierung].[GruppenID] WHERE [Identnr].[Typ] LIKE '%WPD%' OR [Identnr].[Typ] LIKE '%WPF%' OR [Identnr].[Typ] LIKE '%WSD%' ORDER BY [Identnr].[AnlageDatum] DESC