返回结果集中不同数量的列

时间:2013-10-22 22:53:15

标签: sql-server-2008 tsql

我对if语句不是很熟悉所以我需要一些基于以下场景的帮助。

我需要从TABLE_A返回一些列作为结果集,其中返回的列数基于另一个表中的设置,例如,TABLE_B.LEVEL。例如,TABLE_B.LEVEL可以设置为3,因此结果集需要包含TABLE_A中的(3-1)列。幸运的是,TABLE_A中的列标题包含类似于以下内容的值:STLEVEL01,STLEVEL02,STLEVEL03等,直到STLEVEL09。

所以在我的例子中,如果TABLE_B.LEVEL = 3则返回STLEVEL01,STLEVEL02

希望这是有道理的。

感谢。

1 个答案:

答案 0 :(得分:0)

这是一个使用动态SQL的解决方案 - 虽然我建议重新考虑您的解决方案,因为从语句中返回不同数量的列感觉就像设计缺陷。

declare @sql nvarchar(max)

;with cte as
(
    select top 1 cast('select STLEVEL01 ' as nvarchar(max)) [sql], 0 [level], [level] [lastColumn]
    from table_b 

    union all

    select [sql] + ', STLEVEL0' + CAST([level]+1 as nvarchar(max)), [level]+1, [lastColumn]
    from cte
    where [level] < [lastColumn]
)
select @sql = [sql] + ' from table_a'
from cte
where [level] = [lastColumn]

exec(@sql)