1. ホーム
  2. sql

[解決済み] SQL Server FOR EACH ループ

2022-03-13 21:50:54

質問

次のようなSQLクエリがあります。

DECLARE @MyVar datetime = '1/1/2010'    
SELECT @MyVar

これは当然、「2010/1/1」を返します。

例えば、日付のリストが欲しい。

1/1/2010
2/1/2010
3/1/2010
4/1/2010
5/1/2010

そして、数字をFOR EACHして、SQLクエリを実行したいのです。

のようなものです(擬似コード)。

List = 1/1/2010,2/1/2010,3/1/2010,4/1/2010,5/1/2010

For each x in List
do
  DECLARE @MyVar datetime = x

  SELECT @MyVar

つまり、これは次のように返されます。

1/1/2010 2/1/2010 3/1/2010 4/1/2010 5/1/2010

複数の結果セットではなく、1つの結果セットとしてデータを返したいので、クエリの最後に何らかのユニオンを使用し、ループの各反復が次のループにユニオンするようにする必要があるかもしれません。

編集

私は、「to date」パラメータを受け入れる大規模なクエリを持っています。私はそれを24回実行する必要があり、毎回特定のto dateを指定する必要があります(これらの日付は動的である予定です)。

解決方法は?

SQLは主に集合指向の言語なので、一般的にループを使うのは良くないとされています。

この場合、再帰的なCTEを使用して同様の結果を得ることができます。

with cte as
(select 1 i union all
 select i+1 i from cte where i < 5)
select dateadd(d, i-1, '2010-01-01') from cte