Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menjana Julat Tarikh untuk Penginapan Berbilang Tetamu dalam SQL Server?
Bagaimana untuk menjana julat tarikh untuk tarikh daftar masuk berbilang tetamu dalam SQL Server?
Artikel ini akan memperkenalkan kaedah yang cekap untuk menjana rekod harian dalam SQL Server untuk setiap tetamu semasa penginapan mereka. Berbeza sedikit daripada tajuk "Cara menjana julat tarikh dalam SQL Server", kaedah ini lebih memfokuskan pada menjana rekod daftar masuk harian untuk setiap tetamu. Kami menggunakan Ungkapan Jadual Biasa (CTE) untuk mencapai ini.
Penyelesaian:
Pertanyaan berikut dengan bijak menggabungkan fungsi CTE dan ROW_NUMBER() untuk menjana urutan tarikh yang meliputi keseluruhan penginapan tetamu:
<code class="language-sql">DECLARE @start DATE, @end DATE; SELECT @start = '20110714', @end = '20110717'; ;WITH n AS ( SELECT TOP (DATEDIFF(DAY, @start, @end) + 1) n = ROW_NUMBER() OVER (ORDER BY [object_id]) FROM sys.all_objects ) SELECT 'Bob', DATEADD(DAY, n-1, @start) FROM n;</code>
Keputusan:
宾客姓名 | 日期 |
---|---|
Bob | 2011-07-14 |
Bob | 2011-07-15 |
Bob | 2011-07-16 |
Bob | 2011-07-17 |
Kembangkan kepada berbilang tetamu:
Untuk menampung berbilang tetamu, kami boleh menggunakan CTE kedua untuk menyertai jadual tetamu dengan urutan tarikh yang dijana:
<code class="language-sql">DECLARE @t TABLE ( Member NVARCHAR(32), RegistrationDate DATE, CheckoutDate DATE ); INSERT @t SELECT N'Bob', '20110714', '20110717' UNION ALL SELECT N'Sam', '20110712', '20110715' UNION ALL SELECT N'Jim', '20110716', '20110719'; ;WITH [range](d,s) AS ( SELECT DATEDIFF(DAY, MIN(RegistrationDate), MAX(CheckoutDate))+1, MIN(RegistrationDate) FROM @t ), n(d) AS ( SELECT DATEADD(DAY, n-1, (SELECT MIN(s) FROM [range])) FROM (SELECT ROW_NUMBER() OVER (ORDER BY [object_id]) FROM sys.all_objects) AS s(n) WHERE n <= (SELECT MAX(d) FROM [range]) ) SELECT t.Member, n.d FROM n CROSS JOIN @t AS t WHERE n.d BETWEEN t.RegistrationDate AND t.CheckoutDate;</code>
Keputusan:
宾客姓名 | 日期 |
---|---|
Bob | 2011-07-14 |
Bob | 2011-07-15 |
Bob | 2011-07-16 |
Bob | 2011-07-17 |
Sam | 2011-07-12 |
Sam | 2011-07-13 |
Sam | 2011-07-14 |
Sam | 2011-07-15 |
Jim | 2011-07-16 |
Jim | 2011-07-17 |
Jim | 2011-07-18 |
Jim | 2011-07-19 |
Atas ialah kandungan terperinci Bagaimana untuk Menjana Julat Tarikh untuk Penginapan Berbilang Tetamu dalam SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!