Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Самый короткий скрипт для транспонирования результатов выборки / 6 сообщений из 6, страница 1 из 1
08.09.2021, 12:47
    #40095946
Самый короткий скрипт для транспонирования результатов выборки
Здравствуйте!

Скажите, это самый короткий по количеству символов скрипт, чтобы произвести транспонирование содержимого таблицы?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
DECLARE @t TABLE (
	res VARCHAR(50)
	, par_name VARCHAR(50)
	, par_value INT
)
INSERT @t
SELECT 'Баксанские РЭС', 'Параметр 1', 12
UNION SELECT 'Баксанские РЭС', 'Параметр 2', 1

SELECT 
	res 
	, SUM(CASE WHEN par_name = 'Параметр 1' THEN par_value END) par1_value
	, SUM(CASE WHEN par_name = 'Параметр 2' THEN par_value END) par2_value
FROM @t
GROUP BY
	res


Реальная выборка имеет 8 вариантов par_name для каждого res, которые надо на выходе получить одной строкой
...
Рейтинг: 0 / 0
08.09.2021, 14:36
    #40096003
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самый короткий скрипт для транспонирования результатов выборки
Борис Гаркун,

как вариант
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT res,   
  [Параметр 1], [Параметр 2]
FROM  
	@t
PIVOT  
(  
  max(par_value)  
  FOR par_name IN ([Параметр 1], [Параметр 2])  
) AS PivotTable;
...
Рейтинг: 0 / 0
08.09.2021, 15:59
    #40096039
Самый короткий скрипт для транспонирования результатов выборки
HandKot, что-то не пошел ваш вариант. Для сравнения код и результат для первого и вашего варианта(не схлопываются строки)
...
Рейтинг: 0 / 0
08.09.2021, 16:40
    #40096061
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самый короткий скрипт для транспонирования результатов выборки
Борис Гаркун,

это потому, что у вас в таблице есть другие поля, которые вы не указали в примере.


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT res,   
  [Параметр 1], [Параметр 2], [Параметр 2]
FROM (select res, par_name, par_value from @t) a -- выбирать только нужное!
PIVOT  
(  
  SUM(par_value)  
  FOR par_name IN ([Параметр 1], [Параметр 2], [Параметр 3])  
) AS PivotTable;




так будет 1 строка для каждого значения res


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
DECLARE @t TABLE (
	res VARCHAR(50)
	, par_name VARCHAR(50)
	, par_value INT
	, Addition VARCHAR(10)  
)
INSERT @t
SELECT 'Баксанские РЭС', 'Параметр 1', 12, ''
UNION SELECT 'Баксанские РЭС', 'Параметр 2', 1, ''
UNION SELECT 'Баксанские РЭС', 'Параметр 3', 41, 'hh'
UNION SELECT 'Баксанские РЭС', 'Параметр 1', 55, 'jj'
UNION SELECT 'Баксанские РЭС', 'Параметр 2', 75, ''
SELECT res 
	, SUM(CASE WHEN par_name = 'Параметр 1' THEN par_value END) par1_value
	, SUM(CASE WHEN par_name = 'Параметр 2' THEN par_value END) par2_value
FROM @t
GROUP BY res

SELECT res,   
  [Параметр 1], [Параметр 2], [Параметр 2]
FROM @t
PIVOT  
(  
  SUM(par_value)  
  FOR par_name IN ([Параметр 1], [Параметр 2], [Параметр 3])  
) AS PivotTable;

SELECT res,   
  [Параметр 1], [Параметр 2], [Параметр 2]
FROM (select res, par_name, par_value from @t) a
PIVOT  
(  
  SUM(par_value)  
  FOR par_name IN ([Параметр 1], [Параметр 2], [Параметр 3])  
) AS PivotTable;
...
Рейтинг: 0 / 0
08.09.2021, 16:52
    #40096064
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Самый короткий скрипт для транспонирования результатов выборки
Oleg_SQL,

[Параметр 1], [Параметр 2], [Параметр 2] => [Параметр 1], [Параметр 2], [Параметр 3]
...
Рейтинг: 0 / 0
08.09.2021, 16:53
    #40096066
Самый короткий скрипт для транспонирования результатов выборки
Всем спасибо! Так вот ты какой, северный олень! :)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Самый короткий скрипт для транспонирования результатов выборки / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]