Dynamic SQL to generate column names?

前端 未结 4 1385
别那么骄傲
别那么骄傲 2020-11-28 09:01

I have a query where I\'m trying pivot row values into column names and currently I\'m using SUM(Case...) As \'ColumnName\' statements, like so:



        
4条回答
  •  盖世英雄少女心
    2020-11-28 09:20

    -- Darshankar Madhusudan i can do dynamic columnheading table easly...
    --thanks  
    declare @incr int = 1,
            @col  int,
            @str varchar(max),
            @tblcrt varchar(max),
            @insrt varchar(max),
            set @tblcrt = 'DECLARE @Results table ('        
            set @str = ''      
            set @insrt = ''  
        select @col = max(column_id) From tempdb.sys.all_columns    where object_id = object_id('tempdb.dbo.#aaa')
        while @incr <= @col
            BEGIN
                 SELECT @STR = @STR    +case when @incr = 1 then '''' else ',''' end +rtrim(ltrim(NAME))+'''' FROM TEMPDB.SYS.ALL_COLUMNS    WHERE OBJECT_ID = OBJECT_ID('TEMPDB.DBO.#AAA') and column_id = @incr 
                 set @tblcrt = @tblcrt + case when @incr = 1 then '' else ',' end + 'Fld'+CAST(@incr as varchar(3)) +' varchar(50)'
                 set @insrt = @insrt   + case when @incr = 1 then '' else ',' end + 'Fld'+CAST(@incr as varchar(3))
                 SET @INCR = @INCR + 1 
            END 
            set @tblcrt = @tblcrt + ')'
            set @insrt = 'insert into @Results('+@insrt+') values (' + @STR +')'
            set @tblcrt = @tblcrt+ ';' + @insrt + 'select * from @Results '
    exec(@tblcrt)
    

提交回复
热议问题