2013-05-19 2 views
0

Я имею таблицу LEAVE следующегокак извлечь число записей на основе изменения значения столбца

EMPID  LEAVEDT  APPDT  LEAVETYPE 
------  -------  ------- --------- 
E1   10-3-13  5-3-13  CL 
E1   11-3-13  5-3-13  CL 
E1   12-3-13  5-3-13  CL 
E1   13-3-13  5-3-13  SL 
E1   14-3-13  5-3-13  SL 
E1   15-3-13  5-3-13  PL 
E1   16-3-13  5-3-13  CL 
E1   17-3-13  5-3-13  CL 
E1   18-3-13  5-3-13  PL 
E1   19-3-13  5-3-13  PL 
E1   20-3-13  5-3-13  CL 

Теперь я хочу, чтобы принести запись, в которой я хочу, чтобы показать, сколько раз и на сколько дней сотрудник E1 принял каждый вид отпуска. В приведенном выше примере мой результат запроса должен быть: ---

EMPID  FROM  TO   LEAVETYPE 
-----  ----- ------  --------- 
E1   10-3-13 12-3-13  CL 
E1   13-3-13 14-3-13  SL 
E1   15-3-13 15-3-13  PL 
E1   16-3-13 17-3-13  CL 
E1   18-3-13 19-3-13  PL 
E1   20-3-13 20-3-13  CL 

, пожалуйста, помогите мне с подходящим sql-запросом. Обратите внимание: empid и leavedt являются первичными ключами моего стола.

ответ

0

С небольшой модификацией структуры вашего стола, как показано ниже.

 create table leaves (empid varchar(10) , 
       leavefromdt date, 
       leavetodate date, 
       appdate date, 
       leavetype varchar(2)); 

Выборочные данные

 insert into leaves values('E1', Cast('3-10-2013' as datetime), 
     Cast('3-12-2013' as datetime), Cast('3-5-2013' as datetime),'CL'); 

     insert into leaves values('E1',Cast('3-13-2013'as datetime), 
     Cast('3-14-2013'as datetime),Cast('5-3-2013'as datetime),'SL'); 

     insert into leaves values('E1',Cast('3-15-2013'as datetime), 
     Cast('3-15-2013'as datetime),Cast('5-3-2013'as datetime),'PL'); 

     insert into leaves values('E1',Cast('3-16-2013'as datetime), 
     Cast('3-17-2013'as datetime),Cast('5-3-2013'as datetime),'CL'); 

Запрос

 select * , DATEDIFF(DAY, leavefromdt,leavetodate)+1 days from leaves 
     order by empid,leavetype 

Demo SQLFiddle