|
Помогите разобрать запрос | ☑ | ||
---|---|---|---|---|
0
Обработка
30.05.23
✎
07:55
|
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ СотрСДатами.ПодразделениеОрганизации, СотрСДатами.ДатаНачала, СотрСДатами.ДатаОкончания, Лимиты.Период КАК Период, МИНИМУМ(Лимиты.Период1) КАК Период1, Лимиты.Прекратить ПОМЕСТИТЬ ЛимитыБезСумм ИЗ (ВЫБРАТЬ Лимиты.ПодразделениеОрганизации КАК ПодразделениеОрганизации, Лимиты.Лимит КАК Лимит, Лимиты.Период КАК Период, ВЫБОР КОГДА ЕСТЬNULL(Лимит1.Период, &ДатаКон) = &ДатаКон ТОГДА &ДатаКон ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(Лимит1.Период, ДЕНЬ, -1), ДЕНЬ) КОНЕЦ КАК Период1, Лимиты.Прекратить КАК Прекратить ИЗ (ВЫБРАТЬ РСДопНачСП.ПодразделениеОрганизации КАК ПодразделениеОрганизации, РСДопНачСП.Лимит КАК Лимит, &ДатаНач КАК Период, РСДопНачСП.Прекратить КАК Прекратить ИЗ РегистрСведений.MCC_ДополнительныеНачисления.СрезПоследних(&ДатаНач, ) КАК РСДопНачСП ГДЕ РСДопНачСП.Сотрудник = &ПустойСотр ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ РСДопНач.ПодразделениеОрганизации, РСДопНач.Лимит, РСДопНач.Период, РСДопНач.Прекратить ИЗ РегистрСведений.MCC_ДополнительныеНачисления КАК РСДопНач ГДЕ РСДопНач.Период МЕЖДУ &ДатаНач И &ДатаКон И РСДопНач.Сотрудник = &ПустойСотр) КАК Лимиты ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ Лимиты.ПодразделениеОрганизации КАК ПодразделениеОрганизации, Лимиты.Лимит КАК Лимит, Лимиты.Период КАК Период, Лимиты.Прекратить КАК Прекратить ИЗ (ВЫБРАТЬ РСДопНачСП.ПодразделениеОрганизации КАК ПодразделениеОрганизации, РСДопНачСП.Лимит КАК Лимит, &ДатаНач КАК Период, РСДопНачСП.Прекратить КАК Прекратить ИЗ РегистрСведений.MCC_ДополнительныеНачисления.СрезПоследних(&ДатаНач, ) КАК РСДопНачСП ГДЕ РСДопНачСП.Сотрудник = &ПустойСотр ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ РСДопНач.ПодразделениеОрганизации, РСДопНач.Лимит, РСДопНач.Период, РСДопНач.Прекратить ИЗ РегистрСведений.MCC_ДополнительныеНачисления КАК РСДопНач ГДЕ РСДопНач.Период МЕЖДУ &ДатаНач И &ДатаКон И РСДопНач.Сотрудник = &ПустойСотр) КАК Лимиты) КАК Лимит1 ПО Лимиты.ПодразделениеОрганизации = Лимит1.ПодразделениеОрганизации И Лимиты.Период < Лимит1.Период) КАК Лимиты ВНУТРЕННЕЕ СОЕДИНЕНИЕ СотрСДатами КАК СотрСДатами ПО Лимиты.ПодразделениеОрганизации = СотрСДатами.ПодразделениеОрганизации СГРУППИРОВАТЬ ПО СотрСДатами.ДатаОкончания, СотрСДатами.ПодразделениеОрганизации, Лимиты.Период, СотрСДатами.ДатаНачала, Лимиты.Прекратить ; |
|||
1
Обработка
30.05.23
✎
07:56
|
Помогите разобрать этот запрос.
Хочу переименовать одинаковые имена на разных уровнях. После переделать запрос. Вероятно будет у меня ВТ вместо вложенных. |
|||
2
Обработка
30.05.23
✎
07:57
|
Специально упросил запрос сохраняя общую структуру удаляя лишние реквизиты.
|
|||
3
Bigbro
30.05.23
✎
08:02
|
а что не так
маленький запросик, работает? не трожь) |
|||
4
Обработка
30.05.23
✎
08:03
|
Хочу разобрать "КАК Лимиты"
и переделать их в "КАК Лимиты0", "КАК Лимиты1" и "КАК Лимиты2" итп. |
|||
5
Обработка
30.05.23
✎
08:05
|
(3) Это кусочек из запроса состоящий из 900 строк!
Я полностью переделываю и дорабатываю потому что в нем есть ошибка и недочеты. |
|||
6
Мимохожий Однако
30.05.23
✎
08:26
|
Добавь в объединение запрос
............. ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ РСДопНач.ПодразделениеОрганизации, РСДопНач.Лимит, РСДопНач.Период, РСДопНач.Прекратить ИЗ РегистрСведений.MCC_ДополнительныеНачисления КАК РСДопНач0 ГДЕ РСДопНач.Период МЕЖДУ &ДатаНач И &ДатаКон И РСДопНач.Сотрудник = &ПустойСотр) КАК Лимиты0 .......... и т.д. |
|||
7
ADirks
30.05.23
✎
09:05
|
(0) Если текст запроса оформить слегка по-другому, то он легче воспринимается
я бы сделал так ВЫБРАТЬ СотрСДатами.ПодразделениеОрганизации, СотрСДатами.ДатаНачала, СотрСДатами.ДатаОкончания, Лимиты.Период КАК Период, МИНИМУМ(Лимиты.Период1) КАК Период1, Лимиты.Прекратить ПОМЕСТИТЬ ЛимитыБезСумм ИЗ ( ВЫБРАТЬ Лимиты.ПодразделениеОрганизации КАК ПодразделениеОрганизации, Лимиты.Лимит КАК Лимит, Лимиты.Период КАК Период, ВЫБОР КОГДА ЕСТЬNULL(Лимит1.Период, &ДатаКон) = &ДатаКон ТОГДА &ДатаКон ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(Лимит1.Период, ДЕНЬ, -1), ДЕНЬ) КОНЕЦ КАК Период1, Лимиты.Прекратить КАК Прекратить ИЗ ( ВЫБРАТЬ РСДопНачСП.ПодразделениеОрганизации КАК ПодразделениеОрганизации, РСДопНачСП.Лимит КАК Лимит, &ДатаНач КАК Период, РСДопНачСП.Прекратить КАК Прекратить ИЗ РегистрСведений.MCC_ДополнительныеНачисления.СрезПоследних(&ДатаНач, ) КАК РСДопНачСП ГДЕ РСДопНачСП.Сотрудник = &ПустойСотр ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ РСДопНач.ПодразделениеОрганизации, РСДопНач.Лимит, РСДопНач.Период, РСДопНач.Прекратить ИЗ РегистрСведений.MCC_ДополнительныеНачисления КАК РСДопНач ГДЕ РСДопНач.Период МЕЖДУ &ДатаНач И &ДатаКон И РСДопНач.Сотрудник = &ПустойСотр ) КАК Лимиты ЛЕВОЕ СОЕДИНЕНИЕ ( ВЫБРАТЬ Лимиты.ПодразделениеОрганизации КАК ПодразделениеОрганизации, Лимиты.Лимит КАК Лимит, Лимиты.Период КАК Период, Лимиты.Прекратить КАК Прекратить ИЗ ( ВЫБРАТЬ РСДопНачСП.ПодразделениеОрганизации КАК ПодразделениеОрганизации, РСДопНачСП.Лимит КАК Лимит, &ДатаНач КАК Период, РСДопНачСП.Прекратить КАК Прекратить ИЗ РегистрСведений.MCC_ДополнительныеНачисления.СрезПоследних(&ДатаНач, ) КАК РСДопНачСП ГДЕ РСДопНачСП.Сотрудник = &ПустойСотр ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ РСДопНач.ПодразделениеОрганизации, РСДопНач.Лимит, РСДопНач.Период, РСДопНач.Прекратить ИЗ РегистрСведений.MCC_ДополнительныеНачисления КАК РСДопНач ГДЕ РСДопНач.Период МЕЖДУ &ДатаНач И &ДатаКон И РСДопНач.Сотрудник = &ПустойСотр ) КАК Лимиты ) КАК Лимит1 ПО Лимиты.ПодразделениеОрганизации = Лимит1.ПодразделениеОрганизации И Лимиты.Период < Лимит1.Период ) КАК Лимиты ВНУТРЕННЕЕ СОЕДИНЕНИЕ СотрСДатами КАК СотрСДатами ПО Лимиты.ПодразделениеОрганизации = СотрСДатами.ПодразделениеОрганизации СГРУППИРОВАТЬ ПО СотрСДатами.ДатаОкончания, СотрСДатами.ПодразделениеОрганизации, Лимиты.Период, СотрСДатами.ДатаНачала, Лимиты.Прекратить ; |
|||
8
Галахад
гуру
30.05.23
✎
09:11
|
(0) Ну да, такой себе запрос... Попей кофе съешь печеньку. Сядь да перепеши.
|
|||
9
SleepyHead
гуру
30.05.23
✎
09:23
|
(5) Иногда проще переписать заново. Лишние детали выкинуть. За счет временных таблиц может получиться сокращение строк.
|
|||
10
Bigbro
30.05.23
✎
09:35
|
ну если есть ошибка, надо разбираться конечно.
иногда бывает выбрасываешь все что написано садишься делать заново. пишешь вроде все просто и красиво, потом один нюанс, второй, потом при тестировании оказывается что в данных не все так гладко как думалось добавляем еще костыль, еще один. смотрим на результат - а получилось в целом все то же что было изначально. из плюсов - теперь ты понимаешь почему написано именно так ))) |
|||
11
Обработка
30.05.23
✎
09:40
|
Вроде как разобрался со структурой.
|
|||
12
Обработка
30.05.23
✎
09:40
|
ВЫБРАТЬ
СотрСДатами.ПодразделениеОрганизации, СотрСДатами.ДатаНачала, СотрСДатами.ДатаОкончания, Лимиты3.Период КАК Период, МИНИМУМ(Лимиты3.Период1) КАК Период1, Лимиты3.Прекратить ПОМЕСТИТЬ ЛимитыБезСумм ИЗ (ВЫБРАТЬ Лимиты2.ПодразделениеОрганизации КАК ПодразделениеОрганизации, Лимиты2.СуммаЛимита КАК СуммаЛимита, Лимиты2.Период КАК Период, ВЫБОР КОГДА ЕСТЬNULL(Лимит1.Период, &ДатаКон) = &ДатаКон ТОГДА &ДатаКон ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(Лимит1.Период, ДЕНЬ, -1), ДЕНЬ) КОНЕЦ КАК Период1, Лимиты2.Прекратить КАК Прекратить ИЗ (ВЫБРАТЬ РСДопНачСП.ПодразделениеОрганизации КАК ПодразделениеОрганизации, РСДопНачСП.Лимит КАК СуммаЛимита, &ДатаНач КАК Период, РСДопНачСП.Прекратить КАК Прекратить ИЗ РегистрСведений.MCC_ДополнительныеНачисления.СрезПоследних(&ДатаНач, ) КАК РСДопНачСП ГДЕ РСДопНачСП.Сотрудник = &ПустойСотр ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ РСДопНач.ПодразделениеОрганизации, РСДопНач.Лимит, РСДопНач.Период, РСДопНач.Прекратить ИЗ РегистрСведений.MCC_ДополнительныеНачисления КАК РСДопНач ГДЕ РСДопНач.Период МЕЖДУ &ДатаНач И &ДатаКон И РСДопНач.Сотрудник = &ПустойСотр) КАК Лимиты2 ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ Лимиты0.ПодразделениеОрганизации КАК ПодразделениеОрганизации, Лимиты0.СуммаЛимита КАК СуммаЛимита, Лимиты0.Период КАК Период, Лимиты0.Прекратить КАК Прекратить ИЗ (ВЫБРАТЬ РСДопНачСП.ПодразделениеОрганизации КАК ПодразделениеОрганизации, РСДопНачСП.Лимит КАК СуммаЛимита, &ДатаНач КАК Период, РСДопНачСП.Прекратить КАК Прекратить ИЗ РегистрСведений.MCC_ДополнительныеНачисления.СрезПоследних(&ДатаНач, ) КАК РСДопНачСП ГДЕ РСДопНачСП.Сотрудник = &ПустойСотр ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ РСДопНач.ПодразделениеОрганизации, РСДопНач.Лимит, РСДопНач.Период, РСДопНач.Прекратить ИЗ РегистрСведений.MCC_ДополнительныеНачисления КАК РСДопНач ГДЕ РСДопНач.Период МЕЖДУ &ДатаНач И &ДатаКон И РСДопНач.Сотрудник = &ПустойСотр) КАК Лимиты0) КАК Лимит1 ПО Лимиты2.ПодразделениеОрганизации = Лимит1.ПодразделениеОрганизации И Лимиты2.Период < Лимит1.Период) КАК Лимиты3 ВНУТРЕННЕЕ СОЕДИНЕНИЕ СотрСДатами КАК СотрСДатами ПО Лимиты3.ПодразделениеОрганизации = СотрСДатами.ПодразделениеОрганизации СГРУППИРОВАТЬ ПО СотрСДатами.ДатаОкончания, СотрСДатами.ПодразделениеОрганизации, Лимиты3.Период, СотрСДатами.ДатаНачала, Лимиты3.Прекратить |
|||
13
Обработка
30.05.23
✎
09:41
|
Зачем моему предшественнику пришло в голову вложенные запросы обзывать одним и тем же именем "Лимиты"?
Ведь сам же потом не распутает это? |
|||
14
Обработка
30.05.23
✎
09:43
|
Я не люблю вложенные тем боле если надо вложенные повторять.
И если уровень вложенности три и более. Да и данных там не много. Лучше ВТ. Во вторых читабельно. А еще вот так обзывать их. Это сверх беспечности. |
|||
15
Fish
30.05.23
✎
10:07
|
(14) Лимиты - Прекратить! Это же прекрасно :)
|
|||
16
Обработка
30.05.23
✎
10:11
|
(15) Назвать реквизиты РС логично и нормально это другая беда...
Об этом уже молчу. |
|||
17
Прапорщик
30.05.23
✎
10:17
|
А чем вложенный запрос Лимиты0 отличается от Лимиты2?
Сравнение текстов этих двух вложенных запросов говорит, что "Файлы идентичны". |
|||
18
Обработка
30.05.23
✎
10:32
|
(17) Там в запросе из 900 строк очень много повторений.
Вот я для начала хоть структуру разбираю потом уже оптимизирую. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |