Имя: Пароль:
1C
1С v8
Тормозит запрос
,
0 serg-lom89
 
18.12.15
09:37
ВЫБРАТЬ
    ТочкиМаршрутов.Ссылка КАК Точка,
    ТочкиМаршрутов.РасстояниеОтМинска,
    ТочкиМаршрутов.Широта,
    ТочкиМаршрутов.Долгота
ПОМЕСТИТЬ ТочкиМаршрутов
ИЗ
    Справочник.ТочкиМаршрутов КАК ТочкиМаршрутов
ГДЕ
    НЕ ТочкиМаршрутов.ПометкаУдаления
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТочкиМаршрутов.Точка,
    ТочкиМаршрутов.РасстояниеОтМинска,
    ТочкиМаршрутов.Широта,
    ТочкиМаршрутов.Долгота,
    МаршрутыМаршрут.Ссылка КАК Маршрут
ПОМЕСТИТЬ ТочкиИМаршруты
ИЗ
    ТочкиМаршрутов КАК ТочкиМаршрутов
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Маршруты.Маршрут КАК МаршрутыМаршрут
        ПО ТочкиМаршрутов.Точка = МаршрутыМаршрут.Точка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МаршрутыДниНедели.Ссылка КАК Маршрут,
    ВЫБОР
        КОГДА МаршрутыДниНедели.Выбран
            ТОГДА 1
        ИНАЧЕ 0
    КОНЕЦ КАК КолвоВдень,
    МаршрутыДниНедели.ДеньНедели
ПОМЕСТИТЬ МаршрутыДни
ИЗ
    Справочник.Маршруты.ДниНедели КАК МаршрутыДниНедели
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТочкиИМаршруты.Точка.Наименование,
    ТочкиИМаршруты.РасстояниеОтМинска,
    ТочкиИМаршруты.Широта,
    ТочкиИМаршруты.Долгота,
    СУММА(ЕСТЬNULL(Пн.КолвоВдень, 0)) КАК КолПонедельник,
    СУММА(ЕСТЬNULL(Вт.КолвоВдень, 0)) КАК КолВторник,
    СУММА(ЕСТЬNULL(Ср.КолвоВдень, 0)) КАК КолСреда,
    СУММА(ЕСТЬNULL(Чт.КолвоВдень, 0)) КАК КолЧетверг,
    СУММА(ЕСТЬNULL(Пят.КолвоВдень, 0)) КАК КолПятница,
    СУММА(ЕСТЬNULL(Суб.КолвоВдень, 0)) КАК КолСуббота,
    СУММА(ЕСТЬNULL(Воск.КолвоВдень, 0)) КАК КолВоскресенье
ИЗ
    ТочкиИМаршруты КАК ТочкиИМаршруты
        ЛЕВОЕ СОЕДИНЕНИЕ МаршрутыДни КАК Пн
        ПО (ВЫБОР
                КОГДА Пн.ДеньНедели = ЗНАЧЕНИЕ(Перечисление.ДниНедели.Понедельник)
                    ТОГДА ТочкиИМаршруты.Маршрут = Пн.Маршрут
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ)
        ЛЕВОЕ СОЕДИНЕНИЕ МаршрутыДни КАК Вт
        ПО (ВЫБОР
                КОГДА Вт.ДеньНедели = ЗНАЧЕНИЕ(Перечисление.ДниНедели.Вторник)
                    ТОГДА ТочкиИМаршруты.Маршрут = Вт.Маршрут
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ)
        ЛЕВОЕ СОЕДИНЕНИЕ МаршрутыДни КАК Ср
        ПО (ВЫБОР
                КОГДА Ср.ДеньНедели = ЗНАЧЕНИЕ(Перечисление.ДниНедели.Среда)
                    ТОГДА ТочкиИМаршруты.Маршрут = Ср.Маршрут
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ)
        ЛЕВОЕ СОЕДИНЕНИЕ МаршрутыДни КАК Чт
        ПО (ВЫБОР
                КОГДА Чт.ДеньНедели = ЗНАЧЕНИЕ(Перечисление.ДниНедели.Четверг)
                    ТОГДА ТочкиИМаршруты.Маршрут = Чт.Маршрут
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ)
        ЛЕВОЕ СОЕДИНЕНИЕ МаршрутыДни КАК Пят
        ПО (ВЫБОР
                КОГДА Пят.ДеньНедели = ЗНАЧЕНИЕ(Перечисление.ДниНедели.Пятница)
                    ТОГДА ТочкиИМаршруты.Маршрут = Пят.Маршрут
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ)
        ЛЕВОЕ СОЕДИНЕНИЕ МаршрутыДни КАК Суб
        ПО (ВЫБОР
                КОГДА Суб.ДеньНедели = ЗНАЧЕНИЕ(Перечисление.ДниНедели.Суббота)
                    ТОГДА ТочкиИМаршруты.Маршрут = Суб.Маршрут
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ)
        ЛЕВОЕ СОЕДИНЕНИЕ МаршрутыДни КАК Воск
        ПО (ВЫБОР
                КОГДА Воск.ДеньНедели = ЗНАЧЕНИЕ(Перечисление.ДниНедели.Воскресенье)
                    ТОГДА ТочкиИМаршруты.Маршрут = Воск.Маршрут
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ)

СГРУППИРОВАТЬ ПО
    ТочкиИМаршруты.РасстояниеОтМинска,
    ТочкиИМаршруты.Широта,
    ТочкиИМаршруты.Долгота,
    ТочкиИМаршруты.Точка.Наименование


Жутко тормозит запрос??может кто подскажет где не так?
1 serg-lom89
 
18.12.15
09:42
причину нашел...Создал итоговый пакет запроса,
Перенес туда ЕСТЬNULL(Пн.КолвоВдень, 0)) ,и в раз 10 быстрее началось.
Разве это так тормозит при соеденении?
2 Лефмихалыч
 
18.12.15
09:44
(0) Ад какой-то в соединении. Не удивительно, что тормозит.
Что ты получить-то хочешь?
3 Лефмихалыч
 
18.12.15
09:45
(1) это, а еще ВЫБОР в условиях соединения
4 serg-lom89
 
18.12.15
09:46
в общем мне нужно для каждой Точки маршрута получить Дни по каким ездят
5 Dmitrii
 
гуру
18.12.15
09:47
(2) +1
семь соединений с одной таблицей.
Бред какой-то...
Задача решается одним соединением и без всяких там ВЫБОР в условиях связей
6 serg-lom89
 
18.12.15
09:49
(5) какая связь будет?
7 serg-lom89
 
18.12.15
09:51
какое еще условие связи будет?хватило только на одно условие
8 serg-lom89
 
18.12.15
09:51
)
9 Dmitrii
 
гуру
18.12.15
09:59
Что-то типа:

ВЫБРАТЬ
    ТочкиИМаршруты.Точка.Наименование,
    ТочкиИМаршруты.РасстояниеОтМинска,
    ТочкиИМаршруты.Широта,
    ТочкиИМаршруты.Долгота,
    СУММА(ВЫБОР КОГДА ЕСТЬNULL(МаршрутыДни.ДеньНедели, ЗНАЧЕНИЕ(Перечисление.ДниНедели.ПустаяСсылка)) = ЗНАЧЕНИЕ(Перечисление.ДниНедели.Понедельник) ТОГДА ЕСТЬNULL(МаршрутыДни.КолвоВдень, 0) КОНЕЦ) КАК КолПонедельник,
    //<...остальные дни...>
    СУММА(ВЫБОР КОГДА ЕСТЬNULL(МаршрутыДни.ДеньНедели, ЗНАЧЕНИЕ(Перечисление.ДниНедели.ПустаяСсылка)) = ЗНАЧЕНИЕ(Перечисление.ДниНедели.Воскресенье) ТОГДА ЕСТЬNULL(МаршрутыДни.КолвоВдень, 0) КОНЕЦ) КАК КолВоскресенье
ИЗ
    ТочкиИМаршруты КАК ТочкиИМаршруты
        ЛЕВОЕ СОЕДИНЕНИЕ МаршрутыДни КАК МаршрутыДни
        ПО ТочкиИМаршруты.Маршрут = МаршрутыДни.Маршрут
СГРУППИРОВАТЬ ПО
    ТочкиИМаршруты.РасстояниеОтМинска,
    ТочкиИМаршруты.Широта,
    ТочкиИМаршруты.Долгота,
    ТочкиИМаршруты.Точка.Наименование
10 serg-lom89
 
18.12.15
10:01
(9) ок.спасибо за совет..буду пробывать
11 Лефмихалыч
 
18.12.15
10:22
(9) а не проще сгруппировать и по дням недели тоже? ИЛи хотя б итоги по ним взять...