0

テーブルには、2014 年から 2050 年までの列があります。パラメーターに基づいて範囲内の列を返すクエリを作成したい場合、これは可能ですか? 列名を数値として受け入れるためには文字列として格納されているため、比較の前にキャストする必要があるため、さらに注意が必要です。Tenor_End と Tenor_Start は int です (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 は列名を参照するための組み込みではありません。また、選択後に同様のロジックを試してみましたが、役に立ちませんでした。任意の提案をいただければ幸いです。

SSRS で実行されている Microsoft SQL クエリ。テーブルは次のようになります

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 に答える