|
Помогите с запросом | ☑ | ||
---|---|---|---|---|
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) все правильно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |