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

Откуда:
Сообщений: 237
В таблице NotWork хранится номер больничного листа (n_nwds), количество дней листа (days), номер больничного листа продолжением которого является этот лист (n_nwds_main_pe).

Нужно вычислить для больничных листов суммарное количество дней нетрудоспособности, включая все листы, продолжением которых является.

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

С помощью курсоров очень долго считает.
5 сен 19, 16:39    [21964767]     Ответить | Цитировать Сообщить модератору
 Re: Как составить следующий запрос?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19271
Больничные образуют дерево. Так что CTE в руки.

Главный вопрос - гарантирована ли непрерывность листов? не бывает ли наложений или разрывов?
5 сен 19, 16:42    [21964769]     Ответить | Цитировать Сообщить модератору
 Re: Как составить следующий запрос?  [new]
Щукина Анна
Member

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

Recursive CTE
5 сен 19, 16:42    [21964770]     Ответить | Цитировать Сообщить модератору
 Re: Как составить следующий запрос?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19271
А вообще, если это стадия разработки, вместо (или в дополнение к) номера предыдущего храните номер первого больничного в цепи. Сильно упростите себе жизнь, пусть и ценой некоторого усложнения CHECK CONSTRAINT.
5 сен 19, 16:45    [21964774]     Ответить | Цитировать Сообщить модератору
 Re: Как составить следующий запрос?  [new]
seg856
Member

Откуда:
Сообщений: 237
Akina, все бывает. Ничего не гарантировано. Может быть даже один больничный источником двух. Ввести могут что угодно.
Можно рассматривать только непрерывные цепочки, остальные игнорировать.
5 сен 19, 16:46    [21964776]     Ответить | Цитировать Сообщить модератору
 Re: Как составить следующий запрос?  [new]
seg856
Member

Откуда:
Сообщений: 237
Akina,
программа не наша. Нужно запрос делать к чужой БД.
5 сен 19, 16:48    [21964778]     Ответить | Цитировать Сообщить модератору
 Re: Как составить следующий запрос?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19271
seg856
Может быть даже один больничный источником двух. ...
Можно рассматривать только непрерывные цепочки, остальные игнорировать.
И какую из цепочек тогда рассматривать?
5 сен 19, 16:59    [21964793]     Ответить | Цитировать Сообщить модератору
 Re: Как составить следующий запрос?  [new]
iiyama
Member

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

Пример С
5 сен 19, 17:23    [21964819]     Ответить | Цитировать Сообщить модератору
 Re: Как составить следующий запрос?  [new]
iiyama
Member

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

Обманул, пример D конечно
5 сен 19, 17:24    [21964820]     Ответить | Цитировать Сообщить модератору
 Re: Как составить следующий запрос?  [new]
seg856
Member

Откуда:
Сообщений: 237
Akina, любую. Таких некорректных данных немного. Стопроцентной правильности не нужно.
5 сен 19, 19:30    [21964899]     Ответить | Цитировать Сообщить модератору
 Re: Как составить следующий запрос?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28996
Akina
seg856
Может быть даже один больничный источником двух. ...
Можно рассматривать только непрерывные цепочки, остальные игнорировать.
И какую из цепочек тогда рассматривать?
Вообще этот вопрос не к программисту, а к другим людям (налоговой, бухгалтерии и т.д.)
5 сен 19, 20:40    [21964920]     Ответить | Цитировать Сообщить модератору
 Re: Как составить следующий запрос?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19271
alexeyvg
этот вопрос не к программисту, а к другим людям (налоговой, бухгалтерии и т.д.)
Но задать их нужно. И это обязан сделать программист. А он сам в задаче плавает - "любую"!
6 сен 19, 07:17    [21965047]     Ответить | Цитировать Сообщить модератору
 Re: Как составить следующий запрос?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28996
Akina
alexeyvg
этот вопрос не к программисту, а к другим людям (налоговой, бухгалтерии и т.д.)
Но задать их нужно. И это обязан сделать программист. А он сам в задаче плавает - "любую"!
"Плавает в задаче" выражается в том, что он даёт какой то ответ на этот вопрос ("любую", или ещё какую то).
Правильный ответ не плавающего в задаче программиста: "не знаю, мне всё равно, какой алгоритм мне укажут, такой и реализую"
6 сен 19, 20:12    [21965694]     Ответить | Цитировать Сообщить модератору
 Re: Как составить следующий запрос?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 2985
alexeyvg
Akina
пропущено...
И какую из цепочек тогда рассматривать?
Вообще этот вопрос не к программисту, а к другим людям (налоговой, бухгалтерии и т.д.)


Потом, на допросах программист научится и правильные вопросы задавать, и правильные ответы давать
7 сен 19, 10:43    [21965867]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить