name mobile
张三 1234
张三 2134
张三 3124
李四 2345
王五 3245
王五 4235
张六 4567
如何转成如下
name mobile mobile mobile
张三 1234 2134 3124
李四 2345
王五 3245 4235
张六 4567
------解决思路----------------------
DECLARE @SQL NVARCHAR(MAX)
DECLARE @COUNT INT
SET @COUNT=(SELECT MAX(NUM)FROM(SELECT COUNT(1)NUM FROM 表 GROUP BY[name])A)
SET @SQL=';WITH CTE AS(SELECT *,ROW_NUMBER()OVER(PARTITION BY [name] ORDER BY mobile)RN FROM 表)SELECT[name]'
DECLARE @INDEX INT
SET @INDEX=1
WHILE @INDEX<=@COUNT
BEGIN
SET @SQL=@SQL+',ISNULL(MAX(CASE[RN]WHEN '+CAST(@INDEX AS VARCHAR(10))+' THEN[mobile]END),'''')[mobile]'
SET @INDEX=@INDEX+1
END
SET @SQL=@SQL+'FROM CTE GROUP BY [name]'
--PRINT @SQL
EXEC SYS.SP_EXECUTESQL @SQL
动态行转列,把 表 换成你的表名
------解决思路----------------------