0

以下のフィールドを持つ単一のテーブルがあります。

id    name          startdate                enddate
1     u1      2013-01-15 00:00:00.000   2013-01-17 00:00:00.000
2     u2    2013-01-22 00:00:00.000         2013-01-23 00:00:00.000
3     u3    2013-01-23 00:00:00.000         2013-01-23 00:00:00.000

今、開始日と終了日に応じて複数の行が必要です。したがって、上記の行に従って..最初のレコードの3行で返されます..日付15から17は3行(3日)を返します。

クエリについて少し混乱しています。達成するためのより良い方法やサンプルはありますか?

ありがとう。

4

3 に答える 3

2

CTE を使用してそれを解決できます。

DECLARE @Id int
SELECT  @Id = 1
;

WITH    Multiple AS
(
        SELECT  1 Sequence, Id, Name, StartDate, EndDate
        FROM    (       VALUES
                (1, 'u1', '2013-01-15', '2013-01-17'),
                (2, 'u2', '2013-01-22', '2013-01-23'),
                (3, 'u3', '2013-01-23', '2013-01-23')
        )       AS Sample(Id, Name, StartDate, EndDate)
        WHERE   Id = @Id
        UNION   ALL
        SELECT  Sequence + 1, Id, Name, StartDate, EndDate
        FROM    Multiple
        WHERE   Id = @Id AND DATEADD(d, Sequence, StartDate) <= EndDate
)
SELECT  *  
FROM    Multiple
于 2013-10-25T11:24:26.510 に答える
0

そこに「Date」列がある「Dates」テーブルがある場合は、「Dates.Date BETWEEN startdate AND enddate」でテーブルを「Dates」に結合するだけです。

于 2013-10-25T11:15:40.137 に答える