Я пытаюсь сделать несколько сводок для динамических столбцов, но выдает ошибку. Я делаю группу, потому что она возвращает несколько пустых столбцов
Столбец «p.Parameter_1» недопустим в списке выбора.
Образец таблицы
CREATE TABLE [dbo].[TrainingDetails](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Tid] [int] NOT NULL,
[TrainingName] [nvarchar](50) NULL,
[TDate] [nvarchar](50) NULL,
[TPlace] [nvarchar](50) NULL,
[Trainer] [nvarchar](50) NULL,
[Facilitator] [nvarchar](50) NULL,
[TrainingSubject] [nvarchar](50) NULL
)
CREATE TABLE [dbo].[TrainngParticpntDtls](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Tid] [int] NOT NULL,
[PName] [nvarchar](50) NULL,
[PRank] [nvarchar](50) NULL
)
Может кто-нибудь, пожалуйста, помогите
желаемый вывод,

Input

Эта процедура до сих пор пробована.
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SELECT
@cols = STUFF(
(
SELECT DISTINCT
',' + QUOTENAME('Parameter_' + CAST(ROW_NUMBER() OVER(PARTITION BY [td].[TrainingName]
ORDER BY
[td].[tid]) AS VARCHAR(10)))
, +',' + QUOTENAME('Desig_' + CAST(ROW_NUMBER() OVER(PARTITION BY [td].[Tplace]
ORDER BY
[td].[tid]) AS VARCHAR(10)))
FROM
[TrainingDetails] AS [td]
INNER JOIN [dbo].[TrainngParticpntDtls] AS [pd] ON [td].[Tid] = [pd].[Tid]
WHERE [td].[TID] = 1 FOR
XML PATH(''), TYPE
) .value
('.', 'NVARCHAR(MAX)'
), 1, 1, '');
--print @cols
set @query = 'SELECT
[Tplace]
, [TrainingName]
, [TrainingSubject]
, [TDate]
, [Facilitator]
, ' + @cols + '
FROM
(
SELECT
[td].[Tplace]
, [td].[TrainingName]
, [td].[Trainingsubject]
, [td].[TDate]
, [td].[Facilitator]
, [pd].[pname]
, [pd].[pDesig]
, ''Parameter_'' + CAST(ROW_NUMBER() OVER(PARTITION BY [td].[TrainingName]
ORDER BY
[td].[Tid]) AS NVARCHAR) AS [r]
, ''Desig_'' + CAST(ROW_NUMBER() OVER(PARTITION BY [td].[Tplace]
ORDER BY
[td].[tid]) AS NVARCHAR) AS [rn]
FROM
[TrainingDetails] AS [td]
INNER JOIN [dbo].[TrainngParticpntDtls] AS [pd] ON [td].[Tid] = [pd].[Tid]
WHERE [td].[TID] = 1
) AS [x] PIVOT(MAX([Pname]) FOR [r] IN(' + @cols + ')) [p]
PIVOT(MAX([pDesig]) FOR [rn] IN(' + @cols + ')) [pv2]
GROUP BY
[Tplace]
, [TrainingName]
, [TrainingSubject]
, [TDate]
, [Facilitator]
ORDER BY
[TrainingName]'
execute(@query);
вставить оператор для вышеуказанного вопроса это: -
INSERT INTO [dbo].[TrainingDetails] ([Tid],[TrainingName],[TDate],[TPlace],[Trainer],[Facilitator],[TrainingSubject])
VALUES(1,'soft skills','31-03-2017','Webex','John','mary','Eng Grammer')
INSERT INTO [dbo].[TrainingDetails] ([Tid],[TrainingName],[TDate],[TPlace],[Trainer],[Facilitator],[TrainingSubject])
VALUES(2,'Managment skill','31-03-2017','Webex','smith','shah','ABC of Management')
GO
INSERT INTO [dbo].[TrainngParticpntDtls]([Tid],[PName],[PRank])VALUES(1,'pinto','SE')
INSERT INTO [dbo].[TrainngParticpntDtls]([Tid],[PName],[PRank])VALUES(1,'Jack','PM')
INSERT INTO [dbo].[TrainngParticpntDtls]([Tid],[PName],[PRank])VALUES(1,'harry','TL')
INSERT INTO [dbo].[TrainngParticpntDtls]([Tid],[PName],[PRank])VALUES(1,'Rosy','HR')
GO
INSERT INTO [dbo].[TrainngParticpntDtls]([Tid],[PName],[PRank])VALUES(2,'steve','Account')
INSERT INTO [dbo].[TrainngParticpntDtls]([Tid],[PName],[PRank])VALUES(2,'rony','DBA')
INSERT INTO [dbo].[TrainngParticpntDtls]([Tid],[PName],[PRank])VALUES(2,'logan','PM')
GO