Имя: Пароль:
1C
 
Объединение в запросе
0 shadow_sw
 
16.02.17
06:28
Добрый день!
Имеем УТ10.3
Написал запрос:
ВЫБРАТЬ
    Номен.Артикул КАК Артикул,
    Номен.Ссылка КАК Товар,
    ВЫБОР
        КОГДА РангиНоменклатурыСрезПоследних.Ранг = ЗНАЧЕНИЕ(Перечисление.РангиНоменклатуры.A)
            ТОГДА "A"
        КОГДА РангиНоменклатурыСрезПоследних.Ранг = ЗНАЧЕНИЕ(Перечисление.РангиНоменклатуры.B)
            ТОГДА "B"
        КОГДА РангиНоменклатурыСрезПоследних.Ранг = ЗНАЧЕНИЕ(Перечисление.РангиНоменклатуры.C)
            ТОГДА "C"
        ИНАЧЕ ""
    КОНЕЦ КАК Ранг1,
    ВЫБОР
        КОГДА РангиНоменклатурыСрезПоследних.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыНоменклатуры.Активный)
            ТОГДА "Активный"
        КОГДА РангиНоменклатурыСрезПоследних.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыНоменклатуры.Новинка)
            ТОГДА "Новинка"
        КОГДА РангиНоменклатурыСрезПоследних.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыНоменклатуры.Закрыт)
            ТОГДА "Закрыт"
        КОГДА РангиНоменклатурыСрезПоследних.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыНоменклатуры.Неликвид)
            ТОГДА "Неликвид"
        КОГДА РангиНоменклатурыСрезПоследних.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыНоменклатуры.Вывод)
            ТОГДА "Вывод"
        ИНАЧЕ ""
    КОНЕЦ КАК Статус1,
    "" КАК Ранг2,
    "" КАК Статус2,
    "" КАК Ранг3,
    "" КАК Статус3
ИЗ
    Справочник.Номенклатура КАК Номен
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РангиНоменклатуры.СрезПоследних(
                &Дата,
                Склад = &Скл
                    И Номенклатура В ИЕРАРХИИ (&Ном)) КАК РангиНоменклатурыСрезПоследних
        ПО Номен.Ссылка = РангиНоменклатурыСрезПоследних.Номенклатура
ГДЕ
    Номен.Ссылка В ИЕРАРХИИ(&Ном)
    И Номен.ЭтоГруппа = ЛОЖЬ

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    Номен.Артикул,
    Номен.Ссылка,
    "" как Ранг1,
    "" как Статус1,
    ВЫБОР
        КОГДА РангиНоменклатурыСрезПоследних.Ранг = ЗНАЧЕНИЕ(Перечисление.РангиНоменклатуры.A)
            ТОГДА "A"
        КОГДА РангиНоменклатурыСрезПоследних.Ранг = ЗНАЧЕНИЕ(Перечисление.РангиНоменклатуры.B)
            ТОГДА "B"
        КОГДА РангиНоменклатурыСрезПоследних.Ранг = ЗНАЧЕНИЕ(Перечисление.РангиНоменклатуры.C)
            ТОГДА "C"
        ИНАЧЕ ""
    КОНЕЦ как Ранг2,
    ВЫБОР
        КОГДА РангиНоменклатурыСрезПоследних.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыНоменклатуры.Активный)
            ТОГДА "Активный"
        КОГДА РангиНоменклатурыСрезПоследних.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыНоменклатуры.Новинка)
            ТОГДА "Новинка"
        КОГДА РангиНоменклатурыСрезПоследних.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыНоменклатуры.Закрыт)
            ТОГДА "Закрыт"
        КОГДА РангиНоменклатурыСрезПоследних.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыНоменклатуры.Неликвид)
            ТОГДА "Неликвид"
        КОГДА РангиНоменклатурыСрезПоследних.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыНоменклатуры.Вывод)
            ТОГДА "Вывод"
        ИНАЧЕ ""
    КОНЕЦ как Статус2,
    "" как Ранг3,
    "" как Статус3
ИЗ
    Справочник.Номенклатура КАК Номен
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РангиНоменклатуры.СрезПоследних(
                &Дата,
                Склад = &Скл2
                    И Номенклатура В ИЕРАРХИИ (&Ном)) КАК РангиНоменклатурыСрезПоследних
        ПО Номен.Ссылка = РангиНоменклатурыСрезПоследних.Номенклатура
ГДЕ
    Номен.Ссылка В ИЕРАРХИИ(&Ном)
    И Номен.ЭтоГруппа = ЛОЖЬ

На выходе имею такую картину:
http://prntscr.com/e9boqf

Почему не происходит сворачивание, чяднт?? подскажите пожалуйста
1 Sammo
 
16.02.17
06:37
А где должно быть сворачивание? Взяли данные первой части запроса, добавили данные (объединили) с данными второй. Все логично.
Если надо получить одну строку, то это должно быть соединение. Для числовых можно объединять и потом сгруппировать (суммирование)
2 shadow_sw
 
16.02.17
06:40
На сколько я понимаю, конструкция объединить работает как Свернуть() для ТЗ, или ошибаюсь?
3 zak555
 
16.02.17
06:41
(2) нет
4 Fram
 
16.02.17
06:42
(2) просто пи..Ц как ошибаешься
5 shadow_sw
 
16.02.17
06:46
(3)(4):)) чувствую что неправ :)
так, если выгрузить данные в ТЗ, и свернуть  - получаю либо значение по первой части запроса, либо по второй
1 http://prntscr.com/e9bsun
2 http://prntscr.com/e9bsxz

почему так?
6 Fram
 
16.02.17
06:48
Судя по твоим веткам ты уже несколько лет пытаешься писать запросы. И до сих пор соединение от обьедениения не отличаешь. Не твое это, имхо
7 osa1C
 
16.02.17
06:52
(5) Странный ты.... когда ты сворачиваешь, то берется первая попавшееся строчка из таблицы с одинаковыми реквизитами. Все остальные подставляются из нее. Тут тебе нужно не объединение, а соединение. И вообще желательно перед соединением максимально сгруппировать соединяемые таблицы.
8 zak555
 
16.02.17
06:53
без объединения сделай
9 Sammo
 
16.02.17
06:56
(5) Что такое объединить все - мы берем результаты первого запроса и к ним добавляем результаты второго запроса.
Что такое объединить - мы берем результаты первого запроса и к ним добавляем результаты второго запроса, если в результатах первого не было точно таких же результатов.
Т.е. объединение это просто добавление таблиц.
Если нужно добавление на уровне столбцов, то надо либо свернуть (сгруппировать), либо получить соединением. Кстати, сгруппировать можно по максимуму ссылки, тогда может получиться нужны результат
10 Sammo
 
16.02.17
06:58
+9 ну лучше через соединение - никто не мешает основную  таблице соединить с 2, 3 и более таблицами. Тем более, что уже идет левое.
11 shadow_sw
 
16.02.17
07:00
(8)(9) понял, пошел делать, спасибо
12 zak555
 
16.02.17
07:07
(9) твой вариант предполагает использовать два соединения
надо делать одно

а вот настройкой СКД уже выводит, как нужно