Достаточно часто возникает задача транспонирования какой-нибудь таблицы, то есть превращения конкретных строк таблицы в отдельные столбцы. Рассмотрим как решается эта задача на простом примере.
Допустим, в справочнике номенклатуры у нас есть табличная часть "Справочник.Номенклатура.Свойства", в которой собраны свойства и их значения, ниже представлено её содержимое:
Ссылка | Свойство | Значение |
Монитор BENQ GW2480 23.8" | Размер диагонали (дюймы) | 23,8 |
Монитор BENQ GW2480 23.8" | Разрешение | 1920x1080 |
Монитор BENQ GW2480 23.8" | Тип матрицы | IPS |
Монитор IIYAMA ProLite XB2483HSU-B3 23.8" | Размер диагонали (дюймы) | 23,8 |
Монитор IIYAMA ProLite XB2483HSU-B3 23.8" | Разрешение | 1920x1080 |
Монитор IIYAMA ProLite XB2483HSU-B3 23.8" | Тип матрицы | VA |
Монитор SAMSUNG U28E590D "R", 28" | Размер диагонали (дюймы) | 28,0 |
Монитор SAMSUNG U28E590D "R", 28" | Разрешение | 3840x2160 |
Монитор SAMSUNG U28E590D "R", 28" | Тип матрицы | TN |
Нужно каждое свойство определённого вида записать в собственную отдельную колонку, то есть получить таблицу вот такого вида:
Ссылка | РазмерДиагонали | Разрешение | ТипМатрицы |
Монитор BENQ GW2480 23.8" | 23,8 | 1920x1080 | IPS |
Монитор IIYAMA ProLite XB2483HSU-B3 23.8" | 23,8 | 1920x1080 | VA |
Монитор SAMSUNG U28E590D "R", 28" | 28,0 | 3840x2160 | TN |
Этого можно достигнуть при помощи комбинации операции группировки, агрегатной функции "МАКСИМУМ" и оператора "ВЫБОР". Ниже приведён пример запроса, который выполняет транспонирование нашей исходной таблицы "Справочник.Номенклатура.Свойства":
ВЫБРАТЬ
НоменклатураСвойства.Ссылка КАК Ссылка,
МАКСИМУМ(
ВЫБОР
КОГДА НоменклатураСвойства.Свойство = &РазмерДиагонали
ТОГДА НоменклатураСвойства.Значение
ИНАЧЕ NULL
КОНЕЦ
) КАК РазмерДиагонали,
МАКСИМУМ(
ВЫБОР
КОГДА НоменклатураСвойства.Свойство = &Разрешение
ТОГДА НоменклатураСвойства.Значение
ИНАЧЕ NULL
КОНЕЦ
) КАК Разрешение,
МАКСИМУМ(
ВЫБОР
КОГДА НоменклатураСвойства.Свойство = &ТипМатрицы
ТОГДА НоменклатураСвойства.Значение
ИНАЧЕ NULL
КОНЕЦ
) КАК ТипМатрицы
ИЗ Справочник.Номенклатура.Свойства КАК НоменклатураСвойства
ГДЕ
НоменклатураСвойства.Свойство В
(
&РазмерДиагонали,
&Разрешение,
&ТипМатрицы
)
СГРУППИРОВАТЬ ПО
НоменклатураСвойства.Ссылка