|   |   | 
| 
 | Помогите с запросом | ☑ | ||
|---|---|---|---|---|
| 0
    
        Admin_Net_1C 28.04.21✎ 09:35 | 
        Добрый день народ.
 Есть таблица вида: Поставщик | Период | Значение Поставщик1 | 01 | 10 Поставщик2 | 01 | 11 Поставщик1 | 03 | 8 Поставщик2 | 02 | 12 Нужно получить по каждому поставщику на каждую дату в рамках всего интервала (01-03) соответствующее значение. Выбрал уникальные даты: 
Дальше не могу сообразить, как получить даты, которых нет у поставщика (т.е. Поставщик1 - 02; Поставщик2 - 03)? | |||
| 1
    
        mikecool 28.04.21✎ 09:36 | 
        левое соединение по NULL     | |||
| 2
    
        Admin_Net_1C 28.04.21✎ 09:42 | 
        (1) делаю
 
пустая таблица. Что и логично, т.к. в ВТ_УникальныеДаты все даты периода | |||
| 3
    
        mikecool 28.04.21✎ 09:43 | 
        (2) так сделай наоборот, в чем проблема?     | |||
| 4
    
        Admin_Net_1C 28.04.21✎ 09:45 | 
        (3)
 
также пустую выдает | |||
| 5
    
        mikecool 28.04.21✎ 09:50 | 
        (4) ээээ, я так понимаю, что ты вообще не понимаешь сути запроса?     | |||
| 6
    
        Classic 28.04.21✎ 09:50 | 
        (0)
 "Нужно получить по каждому поставщику на каждую дату в рамках всего интервала (01-03) соответствующее значение." Так у тебя именно это и есть в изначальной таблице | |||
| 7
    
        mikecool 28.04.21✎ 09:50 | 
        ВЫБРАТЬ
 ВТ_ИсходныеДанные.Поставщик, ВТ_ИсходныеДанные.Период ИЗ ВТ_УникальныеДаты КАК ВТ_УникальныеДаты ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ИсходныеДанные КАК ВТ_ИсходныеДанные ПО ВТ_УникальныеДаты.Период = ВТ_ИсходныеДанные.Период ГДЕ ВТ_ИсходныеДанные.Период ЕСТЬ NULL наоборот - это так | |||
| 8
    
        Admin_Net_1C 28.04.21✎ 09:51 | 
        (5) видимо) затуп жесткий сегодня)     | |||
| 9
    
        mikecool 28.04.21✎ 09:51 | 
        (6) "Дальше не могу сообразить, как получить даты, которых нет у поставщика (т.е. Поставщик1 - 02; Поставщик2 - 03)?" у него с дальше проблемы     | |||
| 10
    
        Admin_Net_1C 28.04.21✎ 09:52 | 
        (7) пустая таблица возвращается)     | |||
| 11
    
        Admin_Net_1C 28.04.21✎ 09:53 | 
        По идее у меня в ВТ_УникальныеДаты ВСЕ ДАТЫ из диапазона и как бы я левым соединением по периоду не цеплял к ВТ_ИсходныеДанные, у меня NULL не будет. Или я не догоняю чего-то сегодня)     | |||
| 12
    
        Admin_Net_1C 28.04.21✎ 09:55 | 
        (9) эм... где у меня в исходной таблице ?
 Поставщик1 | 02 | 10 Поставщик2 | 03 | 12 | |||
| 13
    
        hhhh 28.04.21✎ 10:01 | 
        (7)  ВЫБРАТЬ
 ВТ_ИсходныеДанные.Поставщик, ВТ_ИсходныеДанные.Период это что? И ежу ведь понятно ВТ_ИсходныеДанные.Период ЕСТЬ NULL, зачем выводить ВТ_ИсходныеДанные.Период ?? | |||
| 14
    
        Admin_Net_1C 28.04.21✎ 10:09 | 
        Сделал, ради интереса, без условия:
 
Как я предполагал в (11), в колонке Период нет значения NULL. Потом в этом запросе поменял местами ВТ_УникальныеДаты <-> ВТ_ИсходныеДанные, результат аналогичный предыдущему - нет NULL в колонке период. Как мне кажется здесь не все так просто, а вот как именно не могу сообоазить) | |||
| 15
    
        osa1C 28.04.21✎ 10:19 | 
        (14) ты скажи внятно, что тебе надо? Вангую, период это у тебя месяц, а тебе надо таблицу с каждой датой месяца  и соответствующим значением, так?     | |||
| 16
    
        Admin_Net_1C 28.04.21✎ 10:24 | 
        (15) период у меня вообще может быть не ограничен. Есть таблица (1) как получить по поставщику "пропущенные" даты значение (предыдущее, если оно есть, см (12))?     | |||
| 17
    
        Admin_Net_1C 28.04.21✎ 10:25 | 
        (16).. НА "пропущенные" даты (в разрезе поставщика) значение...     | |||
| 18
    
        osa1C 28.04.21✎ 10:31 | 
        (17) Что такое пропущенные даты? Ты сам то понимаешь что ты хочешь сделать? в твоей приведенной таблице вообще нет дат.     | |||
| 19
    
        dmt 28.04.21✎ 10:52 | 
        (0) как-то так
 //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Т1.Период, Т2.Поставщик ПОМЕСТИТЬ втКомбинации ИЗ (ВЫБРАТЬ РАЗЛИЧНЫЕ ВТ.Период КАК Период ИЗ ВТ КАК ВТ) КАК Т1, (ВЫБРАТЬ РАЗЛИЧНЫЕ ВТ.Поставщик КАК Поставщик ИЗ ВТ КАК ВТ) КАК Т2 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ втКомбинации.Поставщик КАК Поставщик, втКомбинации.Период КАК Период, МАКСИМУМ(ВТ.Период) КАК МаксПериод ПОМЕСТИТЬ втМаксДаты ИЗ втКомбинации КАК втКомбинации ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ ПО (ВТ.Период <= втКомбинации.Период) СГРУППИРОВАТЬ ПО втКомбинации.Поставщик, втКомбинации.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ втМаксДаты.Поставщик, втМаксДаты.Период, ВТ.Значение ИЗ втМаксДаты КАК втМаксДаты ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ ПО втМаксДаты.Поставщик = ВТ.Поставщик И втМаксДаты.МаксПериод = ВТ.Период УПОРЯДОЧИТЬ ПО втМаксДаты.Поставщик, втМаксДаты.Период | |||
| 20
    
        Admin_Net_1C 28.04.21✎ 11:10 | 
        (19) спасибо тебе добрый человек (+100500 тебе в карму)), чутка модифицировал только последний запрос и как раз получаю то что надо:
 
 | |||
| 21
    
        dmt 28.04.21✎ 11:16 | 
        (20) в (19) косяк, максимальную дату надо искать внутри поставщика:
 ВЫБРАТЬ втКомбинации.Поставщик КАК Поставщик, втКомбинации.Период КАК Период, МАКСИМУМ(ВТ.Период) КАК МаксПериод ПОМЕСТИТЬ втМаксДаты ИЗ втКомбинации КАК втКомбинации ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ ПО (втКомбинации.Поставщик = ВТ.Поставщик <<< вот здесь И ВТ.Период <= втКомбинации.Период) СГРУППИРОВАТЬ ПО втКомбинации.Поставщик, втКомбинации.Период | |||
| 22
    
        Admin_Net_1C 28.04.21✎ 11:33 | 
        (21) нет. Потестил, для моего случая, как раз в (19) все правильно     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |