Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL cara membuat banyak baris dari satu baris

coba:

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

keluaran:

-----------------------
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)

ini berfungsi dengan beberapa baris dalam tabel, lihat di sini:

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

KELUARAN:

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)

Juga, saya tidak memiliki SQL Server 2008, jadi saya menggunakan datetime, jika Anda memiliki 2008, Anda dapat menggunakan DATE tipe data dan Anda tidak perlu menghitung waktu, jadi gunakan baris ini:

dateadd(month,number,y.YourDate)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menghapus Profil Email Database di SQL Server (T-SQL)

  2. Temukan nomor terkecil yang tidak digunakan di SQL Server

  3. Konversi 'datetime2' menjadi 'waktu' di SQL Server (Contoh T-SQL)

  4. Ubah CTE SELECT ke nilai tabel fungsi yang ditentukan pengguna

  5. SQL Server:String Kosong VS Null