0

我对 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

希望这是有道理的。

谢谢。

4

1 回答 1

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)
于 2013-10-22T23:47:59.580 回答