0

在一个表中,我有从 2014 年到 2050 年的列。如果我想编写一个查询,该查询将返回基于参数的范围之间的列,这可能吗?它变得更加棘手,因为为了让它接受列名作为数字,它们被存储为字符串,因此必须在比较之前对其进行强制转换。Tenor_End 和 Tenor_Start 是整数(2014、2015 ... 2050)

Select *
From MMD_Scale
WHERE (@Tenor_End   IS NULL and CAST(c.Name AS INT) >= @Tenor_Start) OR
      (@Tenor_Start IS NULL and CAST(c.Name AS INT) <= @Tenor_End) OR
      (@Tenor_Start IS NOT NULL AND @Tenor_End IS NOT NULL 
         AND CAST(c.Name AS INT) >= @Tenor_Start 
         AND CAST(c.Name AS INT) <= @Tenor_End) OR
      (@Tenor_Start IS NULL 
         AND @Tenor_End IS NULL 
         AND CAST(c.Name AS INT) IS NOT NULL)

这是我从在线资源拼凑而成的,但 c.Name 不是用于引用列名的内置内容。选择后我也尝试了类似的逻辑,但无济于事。任何建议表示赞赏。

Microsoft SQL 查询正在 SSRS 中运行。桌子看起来像

Date     | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 |
-------------------------------------------------------------
8/2/2013 | .1   | .9   |  1.7 |  2.0 | 2.5  |  1.1 | .1   |
8/6/2013 | .6   | 1.2  |  2.2 |  1.2 | 3.2  |  1.9 | .8   |

我想显示所有行但一系列列,即 2014 年到 2017 年之间

4

1 回答 1

1

如果我正确理解您的问题,您可以使用一些动态 sql,例如

DECLARE @Tenor_Start    VARCHAR(100)='Col2014';
DECLARE @Tenor_End      VARCHAR(100)='Col2015';

DECLARE @query  NVARCHAR(MAX)=
'
    SELECT
     *
    FROM MMD_Scale
    WHERE '+@Tenor_Start+' IS NULL
    AND '+@Tenor_End+' IS NULL';

EXEC sp_executesql @query;

或者

EXEC (@query);
于 2013-08-13T13:58:58.713 回答