Вход | Регистрация
 

Разгруппировать в запросе

Разгруппировать в запросе
Я
   shira84
 
17.05.19 - 10:33
В регистре Продажи есть запись:
Бананы 5 шт на сумму 50 руб.
Простой запрос
ВЫБРАТЬ
    Продажи.Номенклатура КАК Номенклатура,
    Продажи.Количество КАК Количество,
    Продажи.Сумма КАК Сумма
ИЗ
    РегистрНакопления.Продажи КАК Продажи
Как перестроить запрос, так чтобы на выходе получить пять строк, а не одну?
Бананы 1шт на сумму 10 руб.
Бананы 1шт на сумму 10 руб.
Бананы 1шт на сумму 10 руб.
Бананы 1шт на сумму 10 руб.
Бананы 1шт на сумму 10 руб.
 
 
   shira84
 
1 - 17.05.19 - 10:43
Надеюсь понятно написал, так чтобы было столько же строк сколько продано по количеству со средней ценой. Нужно для расчета з/п в УНФ (там только запросом), руководитель решил премировать сотрудников при превышении количественного плана продаж.
   palsergeich
 
2 - 17.05.19 - 10:49
Тебе нужны не остатки, а обороты.
Ну сгруппировать приходы и расходы, я думаю сможешь
   palsergeich
 
3 - 17.05.19 - 10:51
А все понял, у тебя физически одна строка
   palsergeich
 
4 - 17.05.19 - 10:52
Ну, вопрос зачем? такие вещи делаются в постобработке обычно
   los_hooliganos
 
5 - 17.05.19 - 10:54
Соедини строку с самой собой и подели на "Количество штук продано"
   shira84
 
6 - 17.05.19 - 10:55
Постобработкой никак это в УНФ показатель расчета з/п, там только запрос
   los_hooliganos
 
7 - 17.05.19 - 10:55
Чуть сложнее это сделать таблицу агрегированной. И в ней делать уже деление, соединяя саму с собой
   shadow_sw
 
8 - 17.05.19 - 10:55
если нужно контролировать по продажам сотрудников, сделай вывод по регистратору, там будет понятно все
   palsergeich
 
9 - 17.05.19 - 10:56
(7) Не надо студентам про такие вещи рассказывать.
   shira84
 
10 - 17.05.19 - 10:56
(5) это как?
   los_hooliganos
 
11 - 17.05.19 - 10:57
ВЫБРАТЬ 
    Продажи.Номенклатура КАК Номенклатура, 
    Продажи.Количество/Делитель.Количество КАК Количество, 
    Продажи.Сумма/Делитель.Количество КАК Сумма
ИЗ 
    РегистрНакопления.Продажи КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 
    Продажи.Номенклатура КАК Номенклатура, 
    Продажи.Количество КАК Количество, 
    Продажи.Сумма КАК Сумма
ИЗ 
    РегистрНакопления.Продажи КАК Продажи) КАК Делитель ПО Номенклатура = Номенклатура
   los_hooliganos
 
12 - 17.05.19 - 10:58
(11) Да вот только строка будет 1 вместо 5 :)
   palsergeich
 
13 - 17.05.19 - 10:58
(5) Но так не получишь 5 строк из одной.
(10) В запросе из строки можно получить среднее значение, то есть цена этой строки банана = 50/5 = среднее 10
И дальше использовать в алгоритмах
   RomanYS
 
14 - 17.05.19 - 10:58
(11) Эээ... если была одна запись, то она и останется в результате
   RomanYS
 
15 - 17.05.19 - 11:00
(0) Получить можно, соединив с таблицей-счетчиком. Но зачем - не понятно.
(6) Зачем там 10 записей. Продажи и количество - это реальный пример?
   los_hooliganos
 
16 - 17.05.19 - 11:01
(13) Да, для пяти/n- строк нужно будет сделать вспомогательную таблицу с числом максимальное количество проданных.
   shadow_sw
 
17 - 17.05.19 - 11:03
коллеги, вы слишком глубоко копаете...ТС сам не понимает, что ему надо..ну есть агрегат  - добавь детализацию и получишь, что хочется
   shira84
 
18 - 17.05.19 - 11:03
(16) да я тож в эту сторону думаю
   Zmich
 
19 - 17.05.19 - 11:03
Создать последовательность натуральных чисел 1, 2, 3, ... (обрубить на максимальном возможном значении), запихать во временную таблицу, соединить твои записи с этой ВТ по условию Продажи.Количество >= числа из ВТ.
   los_hooliganos
 
20 - 17.05.19 - 11:08
(19) Кросс джин, условие в ГДЕ и "<="
   palsergeich
 
21 - 17.05.19 - 11:13
(20) Ставлю сотку, среднего в этой задаче будет достаточно
   shira84
 
22 - 17.05.19 - 11:19
(19) пытаюсь сделать так
   Zmich
 
23 - 17.05.19 - 11:28
(20). Соединение левое, условие не в ГДЕ, а в условии соединения, не "<=", а ">=".
        ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(3, 0)));
    ТЗ.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(5, 2)));
    СтрТЗ = ТЗ.Добавить();
    СтрТЗ.Количество = 10;
    СтрТЗ.Сумма = 500;
    НР = Новый ТаблицаЗначений;
    НР.Колонки.Добавить("Счетчик", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(3, 0)));
    Для Счетчик = 1 По 100 Цикл
        СтрНР = НР.Добавить();
        СтрНР.Счетчик = Счетчик;
    КонецЦикла;
    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    ТЗ.Количество КАК Количество,
    |    ТЗ.Сумма КАК Сумма
    |ПОМЕСТИТЬ ВремТЗ
    |ИЗ &ТЗ КАК ТЗ;
    |
    |ВЫБРАТЬ
    |    НР.Счетчик КАК Счетчик
    |ПОМЕСТИТЬ ВремНР
    |ИЗ &НР КАК НР;
    |
    |ВЫБРАТЬ
    |    1 КАК Количество1,
    |    ВремТЗ.Сумма/ВремТЗ.Количество КАК СуммаСредняя
    |ИЗ
    |   ВремТЗ
    |    ЛЕВОЕ СОЕДИНЕНИЕ
    |        ВремНР
    |    ПО
    |        ВремТЗ.Количество >= ВремНР.Счетчик";
    Запрос.УстановитьПараметр("ТЗ", ТЗ);
    Запрос.УстановитьПараметр("НР", НР);

Результат:

1                  50
1                  50
1                  50
1                  50
1                  50
1                  50
1                  50
1                  50
1                  50
1                  50
   Вася Теркин
 
24 - 17.05.19 - 11:41
(11) Чем отличается от
ВЫБРАТЬ 
    Продажи.Номенклатура КАК Номенклатура, 
    Продажи.Количество/Продажи.Количество КАК Количество, 
    Продажи.Сумма/Продажи.Количество КАК Сумма
ИЗ 
    РегистрНакопления.Продажи КАК Продажи
?
   shira84
 
25 - 17.05.19 - 12:06
ВЫБРАТЬ
    Продажи.Номенклатура КАК Номенклатура,
    Продажи.Количество КАК Количество,
    Продажи.Сумма КАК Сумма
ПОМЕСТИТЬ ВРТЗ
ИЗ
    РегистрНакопления.Продажи КАК Продажи;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    10 * t1.a + t2.b КАК Поле1
ПОМЕСТИТЬ ВРНР
ИЗ
    (ВЫБРАТЬ
        0 КАК a
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        1
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        2
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        3
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        4
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        5
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        6
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        7
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        8
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        9) КАК t1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            1 КАК b
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            9
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            10) КАК t2
        ПО (ИСТИНА)
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    1 КАК Количество,
    ВРТЗ.Номенклатура КАК Номенклатура,
    ВРТЗ.Сумма / ВРТЗ.Количество КАК Цена
ИЗ
    ВРТЗ КАК ВРТЗ
        ЛЕВОЕ СОЕДИНЕНИЕ ВРНР КАК ВРНР
        ПО (ВРТЗ.Количество >= ВРНР.Поле1)
   shira84
 
26 - 17.05.19 - 12:06
(23) Спасибо!


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.