我有一个带有列和值的表格,如下所示
我如何在第二个表格列中以DYNAMIC列名获取结果-第一个以“ prgmg_product_id”命名,其余列为“ source ID 1”,“ source ID 2”,“ source ID 3”
为了使用Dynamic SQL实现此目的,以下内容将有所帮助:
CREATE TABLE #Prgmg ( prgmg_product_id INT ,source_id_other INT ); INSERT #Prgmg ( prgmg_product_id ,source_id_other ) VALUES (3310,11478) ,(3337,10833) ,(3354,11466) ,(4039,4846) ,(4039,65454) ,(4039,65456); DECLARE @DYColumns NVARCHAR(1000) ,@DYSqlQuery NVARCHAR(4000); -- CREATE THE COLUMNS REQUIRED SET @DYColumns = STUFF(( SELECT DISTINCT ',' + N'sourceID' + CAST(ROW_NUMBER() OVER (PARTITION BY prgmg_product_id ORDER BY prgmg_product_id, source_id_other) AS NVARCHAR(10)) FROM #Prgmg FOR XML PATH('') ), 1, 1, ''); -- CREATE THE DYNAMIC SQL AND ADD IN THE CREATED COLUMNS SET @DYSqlQuery = ' SELECT prgmg_product_id,' + @DYColumns + ' FROM ( SELECT prgmg_product_id ,CAST(N''sourceID'' + CAST(ROW_NUMBER() OVER ( PARTITION BY prgmg_product_id ORDER BY prgmg_product_id, source_id_other ) AS NVARCHAR(10)) AS NVARCHAR(100)) AS Col ,source_id_other FROM #Prgmg S1 ) X PIVOT(MIN(source_id_other) FOR Col IN (' + @DYColumns + ')) P' EXECUTE sp_executesql @DYSqlQuery;
尽管确实为您提供了解决方案,但您应该花一些时间来了解所使用的概念。例如创建所需使用的列ROW_NUMBER以及如何映射到的使用PIVOT。
ROW_NUMBER
PIVOT