0 Votes
Last modified by Сергей Коршунов on 2022/04/21 17:56

Show last authors
1 = Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) =
2
3
4
5 [[PIVOT>>url:https://infostart.ru/public/all/?public-filter[search]=PIVOT]] [[Транспонирование>>url:https://infostart.ru/public/all/?public-filter[search]=+%D2%F0%E0%ED%F1%EF%EE%ED%E8%F0%EE%E2%E0%ED%E8%E5]]
6
7 **В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.**
8
9 Достаточно часто возникает задача транспонирования какой-нибудь таблицы, то есть превращения конкретных строк таблицы в отдельные столбцы. Рассмотрим как решается эта задача на простом примере.
10
11 Допустим, в справочнике номенклатуры у нас есть табличная часть "Справочник.Номенклатура.Свойства", в которой собраны свойства и их значения, ниже представлено её содержимое:
12
13
14 |**Ссылка**|**Свойство**|**Значение**
15 |Монитор BENQ GW2480 23.8"|Размер диагонали (дюймы)|23,8
16 |Монитор BENQ GW2480 23.8"|Разрешение|1920x1080
17 |Монитор BENQ GW2480 23.8"|Тип матрицы|IPS
18 |Монитор IIYAMA ProLite XB2483HSU-B3 23.8"|Размер диагонали (дюймы)|23,8
19 |Монитор IIYAMA ProLite XB2483HSU-B3 23.8"|Разрешение|1920x1080
20 |Монитор IIYAMA ProLite XB2483HSU-B3 23.8"|Тип матрицы|VA
21 |Монитор SAMSUNG U28E590D "R", 28"|Размер диагонали (дюймы)|28,0
22 |Монитор SAMSUNG U28E590D "R", 28"|Разрешение|3840x2160
23 |Монитор SAMSUNG U28E590D "R", 28"|Тип матрицы|TN
24
25
26 Нужно каждое свойство определённого вида записать в собственную отдельную колонку, то есть получить таблицу вот такого вида:
27
28
29 |**Ссылка**|**РазмерДиагонали**|**Разрешение**|**ТипМатрицы**
30 |Монитор BENQ GW2480 23.8"|23,8|1920x1080|IPS
31 |Монитор IIYAMA ProLite XB2483HSU-B3 23.8"|23,8|1920x1080|VA
32 |Монитор SAMSUNG U28E590D "R", 28"|28,0|3840x2160|TN
33
34
35 Этого можно достигнуть при помощи комбинации операции группировки, агрегатной функции "МАКСИМУМ" и  оператора "ВЫБОР". Ниже приведён пример запроса, который выполняет транспонирование нашей исходной таблицы "Справочник.Номенклатура.Свойства":
36
37
38 {{{ВЫБРАТЬ
39 НоменклатураСвойства.Ссылка КАК Ссылка,
40
41 МАКСИМУМ(
42 ВЫБОР
43 КОГДА НоменклатураСвойства.Свойство = &РазмерДиагонали
44 ТОГДА НоменклатураСвойства.Значение
45 ИНАЧЕ NULL
46 КОНЕЦ
47 ) КАК РазмерДиагонали,
48
49 МАКСИМУМ(
50 ВЫБОР
51 КОГДА НоменклатураСвойства.Свойство = &Разрешение
52 ТОГДА НоменклатураСвойства.Значение
53 ИНАЧЕ NULL
54 КОНЕЦ
55 ) КАК Разрешение,
56
57 МАКСИМУМ(
58 ВЫБОР
59 КОГДА НоменклатураСвойства.Свойство = &ТипМатрицы
60 ТОГДА НоменклатураСвойства.Значение
61 ИНАЧЕ NULL
62 КОНЕЦ
63 ) КАК ТипМатрицы
64
65 ИЗ Справочник.Номенклатура.Свойства КАК НоменклатураСвойства
66 ГДЕ
67 НоменклатураСвойства.Свойство В
68 (
69 &РазмерДиагонали,
70 &Разрешение,
71 &ТипМатрицы
72 )
73
74 СГРУППИРОВАТЬ ПО
75 НоменклатураСвойства.Ссылка}}}