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

现在,我想要多行取决于开始和结束日期。因此,根据上述行.. 它返回三行作为第一条记录.. 日期 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

如果您有一个带有“日期”列的“日期”表,只需将您的表连接到“开始日期和结束日期之间的日期”上的“日期”。

于 2013-10-25T11:15:40.137 回答
0

我不太确定,但下面是我尝试过的..

SELECT c1.* 
FROM master..spt_values p 
    INNER JOIN tempQuery c1
        ON RIGHT(CAST(c1.stdate AS DATE),2) <= (CASE WHEN p.number = 0 THEN 1 ELSE p.number END)
WHERE TYPE='p'
AND p.number BETWEEN RIGHT(CAST(c1.stdate AS DATE),2) AND RIGHT(CAST(c1.endate AS DATE),2)
于 2013-10-25T12:03:09.203 回答