sql >> データベース >  >> RDS >> Sqlserver

SQL 単一の行から複数​​の行を作成する方法

    試してください:

    DECLARE @YourTable table (YourDate datetime, value int)insert into @YourTable VALUES ('2011-7-12',5);WITH AllNumbers AS( SELECT 0 AS Number UNION ALL SELECT Number+1 FROM AllNumbers WHERE Number<4)SELECT dateadd(month,number,DATEADD(month,DATEDIFF(month,0,YourDate),0)) FROM @YourTable y INNER JOIN AllNumbers a ON 1=1  

    出力:

    <前>-----------------------2011-07-01 00:00:00.0002011-08-01 00:00:00.0002011-09 -01 00:00:00.0002011-10-01 00:00:00.0002011-11-01 00:00:00.000 (影響を受ける 5 行)

    テーブル内の複数の行で機能します。こちらを参照してください:

    DECLARE @YourTable table (YourDate datetime, ValueOf int)insert into @YourTable VALUES ('2011-7-12',5)insert into @YourTable VALUES ('2012-4-24',6); WITH AllNumbers AS( SELECT 0 AS Number UNION ALL SELECT Number+1 FROM AllNumbers WHERE Number<4)SELECT y.ValueOf ,dateadd(month,number,DATEADD(month,DATEDIFF(month,0,y.YourDate),0)) FROM @YourTable y INNER JOIN AllNumbers a ON 1=1 ORDER BY 1,2  

    出力:

    ValueOf ----------------------- -----------------------5 2011-07-01 00:00 :00.0005 2011-08-01 00:00:00.0005 2011-09-01 00:00:00.0005 2011-10-01 00:00:00.0005 2011-11-01 00:00:00.0006 2012-04-01 00:00 :00.0006 2012-05-01 00:00:00.0006 2012-06-01 00:00:00.0006 2012-07-01 00:00:00.0006 2012-08-01 00:00:00.000(10 行が影響を受ける)   

    また、私は SQL Server 2008 を利用できないので、datetime を使用しました。2008 を使用している場合は、DATE を使用できます。 データ型であり、日時をフロアにする必要がないため、次の行を使用してください:

    dateadd(month,number,y.YourDate)  

    1. SQLServerログ配布とディザスタリカバリのインストールと構成-2

    2. カーソルなしの選択クエリで結果の一括収集を使用する

    3. postgreSQLの左側にゼロを埋める

    4. SQLServer2017バックアップ-2