Tsql 显示该区域的日期列表

Tsql 显示该区域的日期列表,tsql,Tsql,也许有人能帮我,我选择了: SELECT p.pers_name + ' ' + p.pers_lastname , a.hol_from , a.hol_to , ( DATEDIFF(day, a.at_nuo, a.at_iki) ) + 1 AS [Holidays days] , YEAR(a.hol_from) AS Eayrs FROM dba.holidays AS a INNER JOIN

也许有人能帮我,我选择了:

SELECT  p.pers_name + ' ' + p.pers_lastname ,
        a.hol_from ,
        a.hol_to ,
        ( DATEDIFF(day, a.at_nuo, a.at_iki) ) + 1 AS [Holidays days] ,
        YEAR(a.hol_from) AS Eayrs
FROM    dba.holidays AS a
        INNER JOIN dba.work AS d ON a.work_id = d.work
        INNER JOIN dba.pers AS p ON d.pers_id = p.pers_id
WHERE   p.pers_vard = 'Name'
        AND p.pers_pav = 'Lastname'
ORDER BY Eayrs DESC
此查询结果:

Name Lastname 2014-02-05 00:00:00   2014-02-07 00:00:00 3   2014
Name Lastname 2014-01-20 00:00:00   2014-01-23 00:00:00 4   2014
我有3天的假期和4天的假期在第二个星期。我怎样才能得到它

Name Lastname 2014-02-05 00:00:00
Name Lastname 2014-02-06 00:00:00
Name Lastname 2014-02-07 00:00:00
Name Lastname 2014-01-20 00:00:00
Name Lastname 2014-01-21 00:00:00
Name Lastname 2014-01-22 00:00:00
Name Lastname 2014-01-23 00:00:00

一种方法是将查询连接到一个日历表,在该日历表中,所有日期都在所需的范围内,例如365行,每个日期一行

SELECT  pers_name ,
        pers_lastname ,
        c.calendardate
FROM    ( SELECT    p.pers_name + ' ' + p.pers_lastname ,
                    a.hol_from ,
                    a.hol_to ,
                    ( DATEDIFF(day, a.at_nuo, a.at_iki) ) + 1 AS [Holidays days] ,
                    YEAR(a.hol_from) AS Eayrs
          FROM      dba.holidays AS a
                    INNER JOIN dba.work AS d ON a.work_id = d.work
                    INNER JOIN dba.pers AS p ON d.pers_id = p.pers_id
          WHERE     p.pers_vard = 'Name'
                    AND p.pers_pav = 'Lastname'
          ORDER BY  Eayrs DESC
        ) t
        INNER JOIN Calendar c ON c.calendardate BETWEEN hol_from AND hol_to

您需要构建并加入日历表。就这样。