Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с циклом в скрипте / 7 сообщений из 7, страница 1 из 1
02.12.2021, 12:50
    #40116702
ejikv2mane
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с циклом в скрипте
Привет всем! Помогите пожалуйста организовать цикл по всей таблице. Написала скрипт по таблице с 1 строкой, но плохо пока знаю циклы и не получается сделать так, чтобы выводились результаты по таблице с более чем одной строкой
Вот мой скрипт:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
declare @str varchar(Max), @idrr int, @idsr int = 131775838 
set @idrr=(select idPaymentRegistry from ftPaymentRegistry where idSimpleRequest=@idsr)
set @str=(select substring(xmlExecRequest,charindex('r207":"',xmlExecRequest)+7, 1) from bfPaymentRegistryDetails where idPaymentRegistry=@idrr)
select
pr.idSimpleRequest AS 'ИД письма',
convert(date,pr.dExecDate,104) AS 'Дата создания',
@str AS 'Срок акцепта',
dateadd(day, 1, convert(date,pr.dExecDate,104)) AS 'Дата промежуточного отчета',
dateadd(day, @str+1, convert(date,pr.dExecDate,104)) AS 'Дата итогового отчета'
from ftPaymentRegistry pr
inner join bfPaymentRegistryDetails pd on pd.idPaymentRegistry=pr.idPaymentRegistry
where pr.idSimpleRequest=@idsr
GROUP BY pr.idSimpleRequest, pr.dExecDate, pd.xmlExecRequest



Поясню: есть таблица ftPaymentRegistry (в этой таблице только одна строка) по id 131775838 (ид пишем вручную) соединяю с таблицей bfPaymentRegistryDetails (в которой уже может быть много строк) и все эти строки надо перебрать и записать с учетом действий над ними

Помогите, если не сложно

Модератор: Используйте тег SRC
...
Рейтинг: 0 / 0
02.12.2021, 22:35
    #40116864
godsql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с циклом в скрипте
так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select
pr.idSimpleRequest AS 'ИД письма',
convert(date,pr.dExecDate,104) AS 'Дата создания',
/*@str*/ substring(xmlExecRequest,charindex('r207":"',xmlExecRequest)+7, 1) AS 'Срок акцепта',
dateadd(day, 1, convert(date,pr.dExecDate,104)) AS 'Дата промежуточного отчета',
dateadd(day, /*@str*/
	cast(isnull(substring(xmlExecRequest,charindex('r207":"',xmlExecRequest)+7, 1),'0') as int)+1
		, convert(date,pr.dExecDate,104)) AS 'Дата итогового отчета'
from ftPaymentRegistry pr
inner join bfPaymentRegistryDetails pd on pd.idPaymentRegistry=pr.idPaymentRegistry
--where pr.idSimpleRequest=@idsr
GROUP BY pr.idSimpleRequest, pr.dExecDate, pd.xmlExecRequest

.
...
Рейтинг: 0 / 0
03.12.2021, 07:03
    #40116906
ejikv2mane
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с циклом в скрипте
godsql,
Спасибо за ваше решение! Даже циклы не понадобились!
пытаюсь теперь не просто прибавлять кол-во дней, а без учета выходных, т.е только рабочие

т.е функция substring(xmlExecRequest,charindex('r207":"',xmlExecRequest)+7, 1) AS 'Срок акцепта', выдает кол-во дней, которые надо прибавить к дате создания

Пытаюсь заменить (substring(xmlExecRequest,charindex('r207":"',xmlExecRequest)+7, 1) из Даты итогового отчета на

(substring(xmlExecRequest,charindex('r207":"',xmlExecRequest)+7, 1),convert(date,pr.dEqDocCreated,104)) +
Cast(((
CASE WHEN 5 <= DATEPART(weekday, convert(date,pr.dEqDocCreated,104))%7
THEN 5
ELSE
DATEPART(weekday, convert(date,pr.dEqDocCreated,104))%7
END)
-1 + substring(xmlExecRequest,charindex('r207":"',xmlExecRequest)+7, 1) )/5
as int)
* 2 -
(Case when DAtepart(weekday, convert(date,pr.dEqDocCreated,104))=6 then 1 else 0 end)


но что-то не идет
...
Рейтинг: 0 / 0
03.12.2021, 08:11
    #40116914
ejikv2mane
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с циклом в скрипте
godsql,
godsql,
Спасибо за ваше решение! Даже циклы не понадобились!
пытаюсь теперь не просто прибавлять кол-во дней, а без учета выходных, т.е только рабочие

т.е функция substring(xmlExecRequest,charindex('r207":"',xmlExecRequest)+7, 1) AS 'Срок акцепта', выдает кол-во дней, которые надо прибавить к дате создания

Пытаюсь заменить (substring(xmlExecRequest,charindex('r207":"',xmlExecRequest)+7, 1) из Даты итогового отчета на

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
(substring(xmlExecRequest,charindex('r207":"',xmlExecRequest)+7, 1),convert(date,pr.dEqDocCreated,104)) +
Cast(((
CASE WHEN 5 <= DATEPART(weekday, convert(date,pr.dEqDocCreated,104))%7
THEN 5
ELSE
DATEPART(weekday, convert(date,pr.dEqDocCreated,104))%7
END)
-1 + substring(xmlExecRequest,charindex('r207":"',xmlExecRequest)+7, 1) )/5
as int)
* 2 -
(Case when DAtepart(weekday, convert(date,pr.dEqDocCreated,104))=6 then 1 else 0 end)



но что-то не идет
...
Рейтинг: 0 / 0
03.12.2021, 08:43
    #40116921
ejikv2mane
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с циклом в скрипте
godsql, свою старую задачу переделала на добавление с рабочими днями, но без переменных не получается

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
declare @DaysToAdd int, @idrr int, @idsr int = 131775838, @FromDate datetime
set @idrr=(select idPaymentRegistry from ftPaymentRegistry where idSimpleRequest=@idsr)
se@DaysToAdd=(select substring(xmlExecRequest,charindex('r207":"',xmlExecRequest)+7, 1) from bfPaymentRegistryDetails where idPaymentRegistry=@idrr)
set @FromDate=convert(date,(select dExecDate from bfPaymentRegistryDetails where idPaymentRegistry=@idrr),104) 
select
pr.idSimpleRequest AS 'ИД письма',
@FromDate AS 'Дата создания',
@DaysToAdd AS 'Срок акцепта',
dateadd(day, 1, convert(date,pr.dExecDate,104)) AS 'Дата промежуточного отчета',
Dateadd(DAY,@DaysToAdd,@FromDate) +
Cast(((
         CASE WHEN 5 <= DATEPART(weekday, @FromDate)%7 
        THEN 5
         ELSE 
         DATEPART(weekday, @FromDate)%7
         END)
      -1 + @DaysToAdd )/5 
 as int) 
* 2 - 
   (Case when DAtepart(weekday, @FromDate)=6 then 1 else 0 end)  AS 'Дата итогового отчета'
from ftPaymentRegistry pr
inner join bfPaymentRegistryDetails pd on pd.idPaymentRegistry=pr.idPaymentRegistry
where pr.idSimpleRequest=@idsr
GROUP BY pr.idSimpleRequest, pr.dExecDate, pd.xmlExecRequestt 
...
Рейтинг: 0 / 0
03.12.2021, 08:54
    #40116926
ejikv2mane
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с циклом в скрипте
ejikv2mane, вроде немного получилось но напутано с датами и числами. ругается Operand type clash: date is incompatible with int

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select
pr.idSimpleRequest AS 'ИД письма',
pd.SReferenceABS AS 'ИД ПД',
convert(date,pr.dEqDocCreated,104) AS 'Дата создания',
substring(xmlExecRequest,charindex('r207":"',xmlExecRequest)+7, 1) AS 'Срок акцепта',
dateadd(day, 1, convert(date,pr.dEqDocCreated,104)) AS 'Дата промежуточного отчета',
Dateadd(DAY,cast(isnull(substring(xmlExecRequest,charindex('r207":"',xmlExecRequest)+7, 1),'0') as int),convert(date,pr.dEqDocCreated,104) ) +
Cast(((
         CASE WHEN 5 <= DATEPART(weekday, convert(date,pr.dEqDocCreated,104))%7 
        THEN 5
         ELSE 
         DATEPART(weekday, convert(date,pr.dEqDocCreated,104))%7
         END)
      -1 + (cast(isnull(substring(xmlExecRequest,charindex('r207":"',xmlExecRequest)+7, 1),'0') as int)) )/5 
 as int) 
* 2 - 
   (Case when DAtepart(weekday, convert(date,pr.dEqDocCreated,104))=6 then 1 else 0 end) AS 'Дата итогового отчета'

from ftPaymentRegistry pr
inner join bfPaymentRegistryDetails pd on pd.idPaymentRegistry=pr.idPaymentRegistry
where pr.idSimpleRequest=245195624
 
GROUP BY pr.idSimpleRequest, pr.dEqDocCreated, pd.xmlExecRequest, pd.SReferenceABS
...
Рейтинг: 0 / 0
14.12.2021, 15:54
    #40119980
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с циклом в скрипте
ejikv2mane
Пи все эти строки надо перебрать и записать с учетом действий над ними



Если для выполнения данной задачи вы употребляете слово "цикл", то вы не понимаете что такое реляционная база данных и как с ней работать.

начните с этого.

https://sql-language.ru/sqlbooks/sql-zaprosy-dlya-prostyx-smertnyx.pdf

Только не говорите, что вам некогда, что надо быстро и т.п.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с циклом в скрипте / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]