Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С)
Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С)
В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.
Достаточно часто возникает задача транспонирования какой-нибудь таблицы, то есть превращения конкретных строк таблицы в отдельные столбцы. Рассмотрим как решается эта задача на простом примере.
Допустим, в справочнике номенклатуры у нас есть табличная часть "Справочник.Номенклатура.Свойства", в которой собраны свойства и их значения, ниже представлено её содержимое:
Ссылка | Свойство | Значение |
Монитор 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 КОНЕЦ ) КАК ТипМатрицы ИЗ Справочник.Номенклатура.Свойства КАК НоменклатураСвойства ГДЕ НоменклатураСвойства.Свойство В ( &РазмерДиагонали, &Разрешение, &ТипМатрицы ) СГРУППИРОВАТЬ ПО НоменклатураСвойства.Ссылка