使用select查询动态添加列

时间:2013-12-11 10:31:24

标签: sql sql-server sql-server-2008 dynamic-queries

我有一个表有20列默认

这20列名为D1 D2 D3 ... D20, 现在使用选择查询我想动态添加其他列..对于前D21 D22 ... D31, 那么我怎样才能编写一个查询来动态添加这些列,增加值.max limit是31,请帮助

默认表格列
                      D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 D16 D17 D18 D19 D20

     现在我想将连续性的列添加到D20,即D21,依此类推到D31,      选择此列时,另一列,即D21到D31也会被添加并选择

查询是

select * ,'  ' as D21 from tbl1

这将给我所有20列D20和一个额外的D21我想要它直到D31而没有硬编码其他列名

3 个答案:

答案 0 :(得分:2)

尝试以下代码

declare @a int =21
Declare @sql varchar(max)='select *,'
while @a <32
begin
set @sql = @sql + cast(@a as varchar) + ' as D' + cast(@a as varchar) + ' ,'

set @a = @a+1

end
set @sql = substring(@sql,0,len(@sql)-1) + ' from tbl1'

 exec( @sql)

答案 1 :(得分:0)

使用动态SQL,您可以执行以下操作:

DECLARE @SQL AS NVARCHAR(MAX) = 'select *';

WITH Numbers (N) AS 
(
    SELECT ROW_NUMBER() OVER (ORDER BY object_id) N FROM sys.all_objects
)
SELECT @SQL = @SQL + ', ''  '' as D' + CAST(N AS NVARCHAR) 
FROM Numbers WHERE N BETWEEN 21 AND 31;

SET @SQL = @SQL + ' from tbl1';

EXEC sp_executesql @SQL

答案 2 :(得分:0)

如果您只想用SQL查询编写

希望它可能适合你。

 with sample as 
       (SELECT 1 + LEVEL-1 idx  
        FROM dual CONNECT BY LEVEL <= 31) 
   select  listagg('D'||idx, ',') 
   within group (order by idx) as list 
   from sample 
   where idx >= 21

请告诉我们是否适合您。

谢谢和问候, 赤拉尼维。

相关问题