2014-02-28 21 views
0

也许有人可以帮我显示日期的名单,我有选择:从区域

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 
+0

您需要的范围内的所有日期的日历表建立并加入日历表。而已。 – JNK

回答

0

一个方法就是加入你的查询,你必须在你需要(如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