Каталог решений - Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С)

Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С)

Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С)

В наличии

В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.

Категория:

Описание

Достаточно часто возникает задача транспонирования какой-нибудь таблицы, то есть превращения конкретных строк таблицы в отдельные столбцы. Рассмотрим как решается эта задача на простом примере.

Допустим, в справочнике номенклатуры у нас есть табличная часть "Справочник.Номенклатура.Свойства", в которой собраны свойства и их значения, ниже представлено её содержимое:

 

СсылкаСвойствоЗначение
Монитор BENQ GW2480 23.8"Размер диагонали (дюймы)23,8
Монитор BENQ GW2480 23.8"Разрешение1920×1080
Монитор BENQ GW2480 23.8"Тип матрицыIPS
Монитор IIYAMA ProLite XB2483HSU-B3 23.8"Размер диагонали (дюймы)23,8
Монитор IIYAMA ProLite XB2483HSU-B3 23.8"Разрешение1920×1080
Монитор IIYAMA ProLite XB2483HSU-B3 23.8"Тип матрицыVA
Монитор SAMSUNG U28E590D "R", 28"Размер диагонали (дюймы)28,0
Монитор SAMSUNG U28E590D "R", 28"Разрешение3840×2160
Монитор SAMSUNG U28E590D "R", 28"Тип матрицыTN

 

Нужно каждое свойство определённого вида записать в собственную отдельную колонку, то есть получить таблицу вот такого вида:

 

СсылкаРазмерДиагоналиРазрешениеТипМатрицы
Монитор BENQ GW2480 23.8"23,81920×1080IPS
Монитор IIYAMA ProLite XB2483HSU-B3 23.8"23,81920×1080VA
Монитор SAMSUNG U28E590D "R", 28"28,03840×2160TN

 

Этого можно достигнуть при помощи комбинации операции группировки, агрегатной функции "МАКСИМУМ" и  оператора "ВЫБОР". Ниже приведён пример запроса, который выполняет транспонирование нашей исходной таблицы "Справочник.Номенклатура.Свойства":

 

ВЫБРАТЬ
	НоменклатураСвойства.Ссылка КАК Ссылка,
	
	МАКСИМУМ(
			ВЫБОР
				КОГДА НоменклатураСвойства.Свойство = &РазмерДиагонали
					ТОГДА НоменклатураСвойства.Значение
				ИНАЧЕ NULL
			КОНЕЦ
		) КАК РазмерДиагонали,

	МАКСИМУМ(
			ВЫБОР
				КОГДА НоменклатураСвойства.Свойство = &Разрешение
					ТОГДА НоменклатураСвойства.Значение
				ИНАЧЕ NULL
			КОНЕЦ
		) КАК Разрешение,

	МАКСИМУМ(
			ВЫБОР
				КОГДА НоменклатураСвойства.Свойство = &ТипМатрицы
					ТОГДА НоменклатураСвойства.Значение
				ИНАЧЕ NULL
			КОНЕЦ
		) КАК ТипМатрицы

ИЗ	Справочник.Номенклатура.Свойства КАК НоменклатураСвойства
ГДЕ	
	НоменклатураСвойства.Свойство В
	(
		&РазмерДиагонали,
		&Разрешение,
		&ТипМатрицы
	)

СГРУППИРОВАТЬ ПО
	НоменклатураСвойства.Ссылка

 

has been added to your cart:
Оформление заказа