powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Самый короткий скрипт для транспонирования результатов выборки
6 сообщений из 6, страница 1 из 1
Самый короткий скрипт для транспонирования результатов выборки
    #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
Самый короткий скрипт для транспонирования результатов выборки
    #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
Самый короткий скрипт для транспонирования результатов выборки
    #40096039
HandKot, что-то не пошел ваш вариант. Для сравнения код и результат для первого и вашего варианта(не схлопываются строки)
...
Рейтинг: 0 / 0
Самый короткий скрипт для транспонирования результатов выборки
    #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
Самый короткий скрипт для транспонирования результатов выборки
    #40096064
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg_SQL,

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


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