Имя: Пароль:
1C
 
Запрос: из Столбика в Строчку
0 GoKerze
 
02.11.15
13:31
Доброго времени суток. Категорически извиняюсь за повтор темы. Не смог придумать как это гуглить.
Пишу запрос. Очень хочется сделать вот такую штуку.

Из регистра достаем вот такую табличку:

ФизЛицо Реквизит
Вася Пупкин Белый
Вася Пупкин Пушистый
Вася Пупкин Наркоман
Иван Иванович Черный
Иван Иванович Лысый
Иван Иванович Спортсмен
Иван Иванович Комсомол

А хочется вот такую табличку:

ФизЛицо Реквизит1 Реквизит2 Реквизит3 Реквизит4
Вася Пупкин Белый Пушистый Наркоман NULL
Иван Иванович Черный Лысый Спортсмен Комсомол

Если столбцов во второй таблице не хватает - отбрасываем.

Как бы такой запрос мог выглядеть?
1 User_Agronom
 
02.11.15
13:33
(0) СКД это лихо делает.
Если отчет, смотри СКД.
2 Одинесю
 
02.11.15
13:34
Соединением соединяешь справа, объединением снизу.
3 Горогуля
 
02.11.15
13:34
как несколько самосоединений
4 rs_trade
 
02.11.15
13:39
(0) Это называется транспонирование
5 GANR
 
02.11.15
13:47
(0) Задача в рамках ЗАПРОСА 1С решается так:
1. Пронумеровать свойства внутри группы ФизЛицо по алфавиту Книга знаний: Нумерация строк в запросе
2. Использовать выбор когда как в п.11 в ветке Как правильно составить запрос?
6 GoKerze
 
02.11.15
14:44
(5) Спасибо. Хорошие ссылки.

Нумерация у меня уже готовая была - от табличной части. Запрос подразумевает, что более двух родственников не может быть никогда! Но так было задумано.

ВЫБРАТЬ
    ФизическиеЛицаСоставСемьи.Ссылка,
    ФизическиеЛицаСоставСемьи.НомерСтроки,
    ФизическиеЛицаСоставСемьи.Имя,
    ФизическиеЛицаСоставСемьи.СтепеньРодства,
    ФизическиеЛицаСоставСемьи.ДатаРождения
ПОМЕСТИТЬ ИсходныйВид
ИЗ
    Справочник.ФизическиеЛица.СоставСемьи КАК ФизическиеЛицаСоставСемьи
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ИсходныйВид.Ссылка КАК ФизЛицо,
    ВЫБОР
        КОГДА ИсходныйВид.НомерСтроки = 1
            ТОГДА ИсходныйВид.Имя
        ИНАЧЕ NULL
    КОНЕЦ КАК Имя1,
    ВЫБОР
        КОГДА ИсходныйВид.НомерСтроки = 1
            ТОГДА ИсходныйВид.СтепеньРодства
        ИНАЧЕ NULL
    КОНЕЦ КАК СтепеньРодства1,
    ВЫБОР
        КОГДА ИсходныйВид.НомерСтроки = 1
            ТОГДА ИсходныйВид.ДатаРождения
        ИНАЧЕ NULL
    КОНЕЦ КАК ДатаРождения1,
    ВЫБОР
        КОГДА ИсходныйВид.НомерСтроки = 2
            ТОГДА ИсходныйВид.Имя
        ИНАЧЕ NULL
    КОНЕЦ КАК Имя2,
    ВЫБОР
        КОГДА ИсходныйВид.НомерСтроки = 2
            ТОГДА ИсходныйВид.СтепеньРодства
        ИНАЧЕ NULL
    КОНЕЦ КАК СтепеньРодства2,
    ВЫБОР
        КОГДА ИсходныйВид.НомерСтроки = 2
            ТОГДА ИсходныйВид.ДатаРождения
        ИНАЧЕ NULL
    КОНЕЦ КАК ДатаРождения2
ПОМЕСТИТЬ МногоСтрок
ИЗ
    ИсходныйВид КАК ИсходныйВид
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МногоСтрок.ФизЛицо,
    МАКСИМУМ(МногоСтрок.Имя1) КАК Имя1,
    МАКСИМУМ(МногоСтрок.СтепеньРодства1) КАК СтепеньРодства1,
    МАКСИМУМ(МногоСтрок.ДатаРождения1) КАК ДатаРождения1,
    МАКСИМУМ(МногоСтрок.Имя2) КАК Имя2,
    МАКСИМУМ(МногоСтрок.СтепеньРодства2) КАК СтепеньРодства2,
    МАКСИМУМ(МногоСтрок.ДатаРождения2) КАК ДатаРождения2
    ИЗ
    МногоСтрок КАК МногоСтрок

СГРУППИРОВАТЬ ПО
    МногоСтрок.ФизЛицо
7 GANR
 
02.11.15
16:06
(6) Не так

выбрать
ФизЛицо,
Максимум(выбор когда НПП = 1 тогда Реквизит конец) как Поле1,
Максимум(выбор когда НПП = 2 тогда Реквизит конец) как Поле2,
Максимум(выбор когда НПП = 3 тогда Реквизит конец) как Поле3
из МногоСтрок
Сгруппировать ФизЛицо

понял?

но вообще лучше средства СКД задействовать, как (1) советует
8 SiAl-chel
 
03.11.15
06:08
(0) Нет, это не транспонирование, это кросс-таблица. Транспонирование это когда столбцы в строки, а строки в столбцы.
9 SiAl-chel
 
03.11.15
07:44
В (8) опечатка, ответ для (4)