Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 применить цикл к столбцу таблицы построчно  [new]
proof666
Member

Откуда:
Сообщений: 16
Еще пока не очень опытен в sql, поэтому нужна помощь...

1. имеется таблица, в которой один из столбцов содержит даты (CreatedOn)
2. имеется цикл, прибавляющий заданное количество дней к заданной дате с помощью таблицы-календаря (дата и статус 1-рабочий,0- не рабочий):
DECLARE  @StartDate datetime, @EndDate datetime, @finish bit, @CTDay int

SET @StartDate='2012-06-01 05:54:53' -- дата к котрой нужно прибавить рабочие дни

SET @CTDay = 5 --количество прибавляемых дней
SET @finish=0
SET @EndDate=CONVERT(datetime, @StartDate)


WHILE @finish=0
BEGIN
	SET @EndDate=dateadd(dd,1,@EndDate)
	IF EXISTS(select sum(isHoliday) from Calendar where dt between @StartDate and @EndDate having sum(isHoliday) = @CTDay) SET @finish=1
END
select @EndDate


Как к исходной таблице добавить столбец с новой рассчитанной датой (т.е. рассчитанной для каждой строки)?
27 июн 12, 17:27    [12784465]     Ответить | Цитировать Сообщить модератору
 Re: применить цикл к столбцу таблицы построчно  [new]
Glory
Member

Откуда:
Сообщений: 104760
proof666
Как к исходной таблице добавить столбец с новой рассчитанной датой

Столбцы в таблицу добавляются командой ALTER TABLE
А ваш цикл надо выкинуть и написать один запрос
27 июн 12, 18:00    [12784642]     Ответить | Цитировать Сообщить модератору
 Re: применить цикл к столбцу таблицы построчно  [new]
proof666
Member

Откуда:
Сообщений: 16
Критика это хорошо :)
И все же, как я понимаю нужно использовать курсор... но вот как это сделать не понимаю...
может есть другие способы?
28 июн 12, 09:09    [12786564]     Ответить | Цитировать Сообщить модератору
 Re: применить цикл к столбцу таблицы построчно  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
proof666
Критика это хорошо :)
И все же, как я понимаю нужно использовать курсор... но вот как это сделать не понимаю...
может есть другие способы?
Какой-такой курсор-мурсор?!
А если так?
SELECT [EndDate]=MIN(C.dt)
FROM Calendar C
WHERE C.dt>=DATEADD(DAY,@CTDay,@StartDate) AND C.isHoliday=0
AND (SELECT COUNT(*) FROM Calendar CC WHERE CC.dt>=@StartDate AND CC.dt<=C.dt AND C.isHoliday=0)=@CTDay;
Написал чисто умозрительно (таблицы Calendar под рукой нет).
Так что может быть и неправ...
28 июн 12, 09:26    [12786634]     Ответить | Цитировать Сообщить модератору
 Re: применить цикл к столбцу таблицы построчно  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
iap
proof666
Критика это хорошо :)
И все же, как я понимаю нужно использовать курсор... но вот как это сделать не понимаю...
может есть другие способы?
Какой-такой курсор-мурсор?!
А если так?
SELECT [EndDate]=MIN(C.dt)
FROM Calendar C
WHERE C.dt>=DATEADD(DAY,@CTDay,@StartDate) AND C.isHoliday=0
AND (SELECT COUNT(*) FROM Calendar CC WHERE CC.dt>=@StartDate AND CC.dt<=C.dt AND C.isHoliday=0)=@CTDay;
Написал чисто умозрительно (таблицы Calendar под рукой нет).
Так что может быть и неправ...
Ошибся:
SELECT [EndDate]=MIN(C.dt)
FROM Calendar C
WHERE C.dt>=DATEADD(DAY,@CTDay,@StartDate) AND C.isHoliday=0
AND (SELECT COUNT(*) FROM Calendar CC WHERE CC.dt>=@StartDate AND CC.dt<=C.dt AND СC.isHoliday=0)=@CTDay;
28 июн 12, 09:28    [12786643]     Ответить | Цитировать Сообщить модератору
 Re: применить цикл к столбцу таблицы построчно  [new]
proof666
Member

Откуда:
Сообщений: 16
iap,

спасибо конечно, но этот запрос выдает не верный результат, логика не много не соответствует моей задаче...
29 июн 12, 10:19    [12792770]     Ответить | Цитировать Сообщить модератору
 Re: применить цикл к столбцу таблицы построчно  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
proof666
iap,

спасибо конечно, но этот запрос выдает не верный результат, логика не много не соответствует моей задаче...

ну так поясните логику вашей задачи, лучше с конкретными данными, и чем не подходит результат работы запроса iap
29 июн 12, 12:01    [12793519]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить