sql >> Databasteknik >  >> RDS >> Sqlserver

SQL hur man skapar flera rader från en enda rad

försök:

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

utdata:

-----------------------
2011-07-01 00:00:00.000
2011-08-01 00:00:00.000
2011-09-01 00:00:00.000
2011-10-01 00:00:00.000
2011-11-01 00:00:00.000

(5 row(s) affected)

det fungerar med flera rader i tabellen, se här:

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

UTGÅNG:

ValueOf     
----------- -----------------------
5           2011-07-01 00:00:00.000
5           2011-08-01 00:00:00.000
5           2011-09-01 00:00:00.000
5           2011-10-01 00:00:00.000
5           2011-11-01 00:00:00.000
6           2012-04-01 00:00:00.000
6           2012-05-01 00:00:00.000
6           2012-06-01 00:00:00.000
6           2012-07-01 00:00:00.000
6           2012-08-01 00:00:00.000

(10 row(s) affected)

Dessutom har jag inte SQL Server 2008 tillgängligt, så jag använde datetime, om du har 2008 kan du använda DATE datatyp och du behöver inte lägga ned datetime, så använd den här raden:

dateadd(month,number,y.YourDate)


  1. Kör för närvarande en fråga i en lagrad procedur

  2. SQLT och partitionering

  3. Union som orsakar ett ORA-01790:-uttryck måste ha samma datatyp som motsvarande uttryck

  4. Laravel 4:Hur tillämpar man ett WHERE-villkor på alla frågor i en vältalig klass?