Имя: Пароль:
1C
1С v8
Объединение двух запросов по одному полю
,
0 adanedhell
 
06.02.15
11:37
1. Автор туп и не умеет пользоваться консолью отчетов 50% (1)
2. Щас поможем 50% (1)
3. Автор молодец, стремится изучить консолью отчетов 0% (0)
Всего мнений: 2

Добрый день форумчане! Уже два дня пытаюсь объединить запросы, искал по форумам, но не нашел похожей проблемы.
Суть в чем, имеется два запроса:

ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Номенклатура.Артикул
{ВЫБРАТЬ
    НоменклатураАртикул,
    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена1}
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК ЦеныНоменклатурыСрезПоследних
ГДЕ
    ЦеныНоменклатурыСрезПоследних.ТипЦен.Ссылка = &ТипЦен

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Номенклатура.Артикул
{ВЫБРАТЬ
    НоменклатураАртикул,
    (ЦеныНоменклатурыСрезПоследних.Цена) КАК Цена2}
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК ЦеныНоменклатурыСрезПоследних
ГДЕ
    ЦеныНоменклатурыСрезПоследних.ТипЦен.Ссылка = &ТипЦен2

Параметры устанавливаются и затем выводится таблица:
НоменклатураАртикул Цена1 Цена2
zzz                 128
zzz                        555
xxx                 16    
xxx                        23
yyy                 12
yyy                        63

Цель стоит в объединении запросов по артикулу:

НоменклатураАртикул Цена1 Цена2
zzz                 128    555
xxx                 16     23
yyy                 12     63


Вопрос к знатокам, как это сделать?
1 Рэйв
 
06.02.15
11:46
помоему ты путаешь объединение и соединение
2 Рэйв
 
06.02.15
11:47
"по ортикулу" какбэ на это намекает
3 Cube
 
06.02.15
11:47
ВЫБРАТЬ
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних_Цена1.Номенклатура.Артикул, ЦеныНоменклатурыСрезПоследних_Цена2.Номенклатура.Артикул) КАК НоменклатураАртикул
{ВЫБРАТЬ
    НоменклатураАртикул,
    ЦеныНоменклатурыСрезПоследних_Цена1.Цена КАК Цена1,
    ЦеныНоменклатурыСрезПоследних_Цена2.Цена КАК Цена2}
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ТипЦен = &ТипЦен1) КАК ЦеныНоменклатурыСрезПоследних_Цена1
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ТипЦен = &ТипЦен2) КАК ЦеныНоменклатурыСрезПоследних_Цена2
        ПО ЦеныНоменклатурыСрезПоследних_Цена1.Номенклатура.Артикул = ЦеныНоменклатурыСрезПоследних_Цена2.Номенклатура.Артикул
4 adanedhell
 
06.02.15
11:57
(3) Вы ШИКАРНЫ, спасибо помогло. Буду медитировать над кодом, пока не пойму, что к чему))
5 Cube
 
06.02.15
12:06
(4) Ну, по хорошему нужно цены тоже обернуть в ЕстьNULL()...
Вот так:

ВЫБРАТЬ
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних_Цена1.Номенклатура.Артикул, ЦеныНоменклатурыСрезПоследних_Цена2.Номенклатура.Артикул) КАК НоменклатураАртикул
{ВЫБРАТЬ
    НоменклатураАртикул,
    (ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних_Цена1.Цена, 0)) КАК Цена1,
    (ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних_Цена2.Цена, 0)) КАК Цена2}
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ТипЦен = &ТипЦен1) КАК ЦеныНоменклатурыСрезПоследних_Цена1
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ТипЦен = &ТипЦен2) КАК ЦеныНоменклатурыСрезПоследних_Цена2
        ПО ЦеныНоменклатурыСрезПоследних_Цена1.Номенклатура.Артикул = ЦеныНоменклатурыСрезПоследних_Цена2.Номенклатура.Артикул
6 shuhard
 
06.02.15
12:20
(0) и туп безнадёжно

Автор туп и не умеет пользоваться консолью отчетов
7 Мыш
 
06.02.15
12:27
Автор, пойми ключевую разницу между ОБЪЕДИНЕНИЕ И СОЕДИНЕНИЕ.

ОБЪЕДИНЕНИЕ это когда строки исходных таблиц просто выводятся вместе, друг за другом, сверху вниз.
Типа сложили вертикально.

СОЕДИНЕНИЕ это когда строки таблиц присоединяются слева или справа по какому-нибудь условию. Складываем горизонтально )

Щас поможем
8 sapphire
 
06.02.15
12:39
(0)
1. Надо решать задачу как она поставлена.
2. Почитайте про запросы и БД вообще, например Бен-Гана.
Иногда помогает.
3. Старайтесь избегать "многоточий" в полях запроса, например, не нужно выделять артикул из номенклатуры.
9 ДемонМаксвелла
 
06.02.15
12:51
и чего, никто до сих пор не сказал про группировку?
10 Крошка Ру
 
06.02.15
12:52
(5) Чтойта я по поводу полного соединения двух срезов последних сомневаюсь. В смысле производительности.
Может просто сгруппировать строки из (0)?
11 ДемонМаксвелла
 
06.02.15
12:53
(10) во-во
12 Cube
 
06.02.15
12:55
(10) (11) Вместо тысячи слов... замер производительность и приходи с результатами... А так - просто пук в лужу.
13 AlexTim03
 
06.02.15
12:57
(0) через объединение это делается так

поле1 значение1 0
   объединить все
поле2 0         значение 2

далее оборачиваешь это и делаешь group by по первой колонке и суммируешь (ну или максимум) по последующим колонкам.
На выходе и будет твой вариант:
zzz                 128    555
xxx                 16     23
yyy                 12     63
14 ДемонМаксвелла
 
06.02.15
12:58
(12) это как раз тот случай, когда мерять не надо и результат очевиден заранее.
15 Cube
 
06.02.15
13:00
(14) Не убедил.
16 Крошка Ру
 
06.02.15
13:01
(12) Да у нас на двоих два десятка слов. Где ж ты тысячу насчитал? А два десятка слов заведомо меньше, чем замер производительности. Так что довольствуйся моим пуком.
17 ДемонМаксвелла
 
06.02.15
13:01
(15) да мне как-то пофиг, делай своим клиентам и работодателям как хочешь
18 Cube
 
06.02.15
13:03
(16) (17) Губки надули, когда писали? А зря...
19 Крошка Ру
 
06.02.15
13:05
(15) " - Я тебе н..уя не верю.
       - А я тебя н..уя и не убеждаю. Это факт!" (с) Snatch