我对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
希望这是有道理的。
感谢。
答案 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)