Имя: Пароль:
1C
1С v8
Подскажите, как соединить два подзапроса
,
0 xaozai
 
01.11.12
13:21
Для примера, такой запрос:
ВЫБРАТЬ
   ВложенныйЗапрос.Организация,
   ВложенныйЗапрос.Сумма,
   ВложенныйЗапрос1.Организация КАК Организация1,
   ВложенныйЗапрос1.Сумма КАК Сумма1
ИЗ
   (ВЫБРАТЬ ПЕРВЫЕ 2
       ЗаказПокупателя.Организация КАК Организация,
       1 КАК Сумма
   ИЗ
       Документ.ЗаказПокупателя КАК ЗаказПокупателя
   
   УПОРЯДОЧИТЬ ПО
       ЗаказПокупателя.Дата) КАК ВложенныйЗапрос
       ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 2
           ЗаказПокупателя.Организация КАК Организация,
           1 КАК Сумма
       ИЗ
           Документ.ЗаказПокупателя КАК ЗаказПокупателя
       
       УПОРЯДОЧИТЬ ПО
           ЗаказПокупателя.Дата УБЫВ) КАК ВложенныйЗапрос1
       ПО ВложенныйЗапрос.Организация = ВложенныйЗапрос1.Организация

В результате получается:
Орг1     1
Орг2     1
         Орг3     1
         Орг4     1


А нужно:
Орг1     1     Орг3     1
Орг2     1     Орг4     1

Как сделать?
1 NcSteel
 
01.11.12
13:24
Объеденить.
2 xaozai
 
01.11.12
13:24
(1) Как?
3 х86
 
01.11.12
13:25
баян
сгруппировать
4 shuhard
 
01.11.12
13:25
(2) бла бла бла ОБЪЕДИНИТЬ ВСЕ бла бла бла
5 xaozai
 
01.11.12
13:25
(3) Можно пример?
6 fisher
 
01.11.12
13:31
Нетривиальная задача. По сути, тебе нужно соединение по номеру строки.
7 xaozai
 
01.11.12
13:34
(4) Так не получается.
8 xaozai
 
01.11.12
13:35
Может в СКД как-то можно сделать?
9 m-serg74
 
01.11.12
13:38
(0) может
"ПО ВложенныйЗапрос.Организация = ВложенныйЗапрос1.Организация"

убрать нафик
10 xaozai
 
01.11.12
13:39
(9) Тогда всё задваивается.
11 m-serg74
 
01.11.12
13:39
что все?
12 xaozai
 
01.11.12
13:41
(11)
Орг1     1     Орг3     1
Орг1     1     Орг4     1
Орг2     1     Орг3     1
Орг2     1     Орг4     1
13 fisher
 
01.11.12
13:48
См (6).
Нумеруешь строки в своих подзапросах и соединяешь их по номеру строки. Как нумеровать - есть на просторах. Там декартово произведение с условием и группировкой.
Короче, красивостью не пахнет, как и сама задача. Ресурсоемко.
Вывод в несколько колонок - задача постобработки. На реляционную аглебру плохо ложится.
14 wylde
 
01.11.12
14:25
(13) С нумерацией строк не все так просто выйдет из-за "ВЫБРАТЬ ПЕРВЫЕ" в каждом вложенном запросе (0)
15 wylde
 
01.11.12
14:48
Задача не такая простая как кажется на первый взгляд.
Из-за ВЫБРАТЬ ПЕРВЫЕ и УПОРЯДОЧИТЬ ПО возникают проблемы с нумерацией.

В общем вот такое решение получилось.

ВЫБРАТЬ
   ВложенныйЗапрос.Организация,
   ВложенныйЗапрос.Сумма,
   ВложенныйЗапрос1.Организация КАК Организация1,
   ВложенныйЗапрос1.Сумма КАК Сумма1
ИЗ
   (ВЫБРАТЬ ПЕРВЫЕ 2
       ЗаказПокупателя.Организация КАК Организация,
       1 КАК Сумма,
       СУММА(ВложенныйЗапрос.НомерСтрокиЗапроса) КАК НомерСтрокиЗапроса
   ИЗ
       Документ.ЗаказПокупателя КАК ЗаказПокупателя
           ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
               ЗаказПокупателя.Ссылка КАК Ссылка,
               1 КАК НомерСтрокиЗапроса
           ИЗ
               Документ.ЗаказПокупателя КАК ЗаказПокупателя) КАК ВложенныйЗапрос
           ПО ЗаказПокупателя.Ссылка >= ВложенныйЗапрос.Ссылка
   
   СГРУППИРОВАТЬ ПО
       ЗаказПокупателя.Организация,
       ЗаказПокупателя.Дата
   
   УПОРЯДОЧИТЬ ПО
       ЗаказПокупателя.Дата) КАК ВложенныйЗапрос
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 2
           ЗаказПокупателя.Организация КАК Организация,
           1 КАК Сумма,
           СУММА(ВложенныйЗапрос.НомерСтрокиЗапроса) КАК НомерСтрокиЗапроса
       ИЗ
           Документ.ЗаказПокупателя КАК ЗаказПокупателя
               ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                   ЗаказПокупателя.Ссылка КАК Ссылка,
                   1 КАК НомерСтрокиЗапроса
               ИЗ
                   Документ.ЗаказПокупателя КАК ЗаказПокупателя) КАК ВложенныйЗапрос
               ПО ЗаказПокупателя.Ссылка <= ВложенныйЗапрос.Ссылка
       
       СГРУППИРОВАТЬ ПО
           ЗаказПокупателя.Дата,
           ЗаказПокупателя.Организация
       
       УПОРЯДОЧИТЬ ПО
           ЗаказПокупателя.Дата УБЫВ,
           НомерСтрокиЗапроса) КАК ВложенныйЗапрос1
       ПО ВложенныйЗапрос.НомерСтрокиЗапроса = ВложенныйЗапрос1.НомерСтрокиЗапроса
16 fisher
 
01.11.12
14:59
(15) Ну и последний штрих, раз ты такой неленивый - отсортируй по названию организации (с учетом возможности одинаковых названий)
17 wylde
 
01.11.12
15:04
думаю того что есть достаточно )
18 fisher
 
01.11.12
15:12
(17) Стопудово недостаточно. К гадалке не ходи - ТС хочет это в отчет вывести в правильном порядке.
19 wylde
 
01.11.12
15:17
(18) ок, ждем что скажет ТС
20 xaozai
 
01.11.12
16:51
wylde, спасибо!
Я решил не заморачиваться и выгрузить один запрос в одну ТЗ, второй - в другую и соединить потом таблички...
21 wylde
 
01.11.12
16:57
(20) Да не за что. Конечно если была такая возможность, то лучше не мудрить и выгружать в две таблицы.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан