肥皂起泡泡
使用ROW_NUMBER(),PIVOT以及一些动态SQL(但没有必要光标):CREATE TABLE [dbo].[stackoverflow_198716]( [code] [varchar](1) NOT NULL, [number] [int] NOT NULL) ON [PRIMARY]DECLARE @sql AS varchar(max)DECLARE @pivot_list AS varchar(max) -- Leave NULL for COALESCE techniqueDECLARE @select_list AS varchar(max) -- Leave NULL for COALESCE techniqueSELECT @pivot_list = COALESCE(@pivot_list + ', ', '') + '[' + CONVERT(varchar, PIVOT_CODE) + ']' ,@select_list = COALESCE(@select_list + ', ', '') + '[' + CONVERT(varchar, PIVOT_CODE) + '] AS [col_' + CONVERT(varchar, PIVOT_CODE) + ']'FROM ( SELECT DISTINCT PIVOT_CODE FROM ( SELECT code, number, ROW_NUMBER() OVER (PARTITION BY code ORDER BY number) AS PIVOT_CODE FROM stackoverflow_198716 ) AS rows) AS PIVOT_CODESSET @sql = ';WITH p AS ( SELECT code, number, ROW_NUMBER() OVER (PARTITION BY code ORDER BY number) AS PIVOT_CODE FROM stackoverflow_198716)SELECT code, ' + @select_list + 'FROM pPIVOT ( MIN(number) FOR PIVOT_CODE IN ( ' + @pivot_list + ' )) AS pvt'PRINT @sqlEXEC (@sql)