Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Транспонирование таблицы / 7 сообщений из 7, страница 1 из 1
03.11.2020, 19:00
    #40015005
wildegor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транспонирование таблицы
Здравствуйте, не осилил задачу такого плана. На сервер приходят в таблицу данные пачками по 3 строки, т.е. имеется таблица вида
Имена Значения Дата
Имя1 10 2020-11-03
Имя2 30 2020-11-03
Имя3 40 2020-11-03
Имя1 10 2020-12-03
Имя2 30 2020-12-03
Имя3 40 2020-12-03

Необходимо перевести в таблицу формата

Имя 1 Имя 2 Имя 3 Дата
10 30 40 2020-11-03
10 30 40 2020-12-03

Прошу сильно не ругайте, но помогите пожалуйста :)
...
Рейтинг: 0 / 0
03.11.2020, 19:27
    #40015015
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транспонирование таблицы
wildegor
Здравствуйте, не осилил задачу такого плана. На сервер приходят в таблицу данные пачками по 3 строки, т.е. имеется таблица вида
Имена Значения Дата
Имя1 10 2020-11-03
Имя2 30 2020-11-03
Имя3 40 2020-11-03
Имя1 10 2020-12-03
Имя2 30 2020-12-03
Имя3 40 2020-12-03

Необходимо перевести в таблицу формата

Имя 1 Имя 2 Имя 3 Дата
10 30 40 2020-11-03
10 30 40 2020-12-03

Прошу сильно не ругайте, но помогите пожалуйста :)

Волшебное слово PIVOT.
Если сделаете скрипт для своей таблицы с загрузкой данных, то напишу пример.
Самому мне лень колбасить вручную ваши данные.
...
Рейтинг: 0 / 0
04.11.2020, 06:19
    #40015133
wildegor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транспонирование таблицы
SQL2008, Конечно. Для примера вот 3 строки:

Код: sql
1.
2.
3.
4.
5.
CREATE TABLE SensorsData (
    TopicName varchar(255) NOT NULL,
    Value FLOAT,
    EventProcessedUtcTime smalldatetime
);


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
INSERT INTO SensorsData (topicname, value, eventprocessedutctime)
VALUES 
('Sensor1', 1.4, '13-01-16 11:22'),
('Sensor2', 2.4, '13-01-16 11:22'),
('Sensor3', 3.4, '13-01-16 11:22'),
('Sensor1', 4.4, '14-01-16 12:22'),
('Sensor2', 5.4, '14-01-16 12:22'),
('Sensor3', 6.4, '14-01-16 12:22');



Если представить в JSON итог должен получится таким:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
[
  {
    "Sensor1": "1.4",
    "Sensor2": "2.4",
    "Sensor3": "3.4",
    "EventProcessedUtcTime": "13-01-16 11:22"
  },
  {
    "Sensor1": "4.4",
    "Sensor2": "5.4",
    "Sensor3": "6.4",
    "EventProcessedUtcTime": "14-01-16 12:22"
  }
]
...
Рейтинг: 0 / 0
04.11.2020, 06:23
    #40015134
wildegor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транспонирование таблицы
С PIVOT не разобрался
...
Рейтинг: 0 / 0
04.11.2020, 08:19
    #40015143
SIMPLicity_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транспонирование таблицы
PIVOT подходит либо для постоянного количества колонок в результирующей таблице, либо для случая когда можно сформировать динамический запрос (PIVOT) и затем его выполнить. Можете посмотреть тут (но я сильно не вчитывался). Для выполнения PIVOT важны версия MSSQL сервера (2005 и более свежий) и версия совместимости базы (100 и больше). Версию MSSQL и базы проще посмотреть в Microsof SQL Server Managenent Studio (свойства сервера и свойства базы).
...
Рейтинг: 0 / 0
04.11.2020, 10:05
    #40015152
godsql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транспонирование таблицы
wildegor,

Код: sql
1.
2.
select [Sensor1], [Sensor2],[Sensor3], eventprocessedutctime from SensorsData
pivot (max(value)  for TopicName in ([Sensor1],[Sensor2],[Sensor3]) ) pvt



или не заморачивайтесь и используйте case
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select max (Sensor1) as Sensor1, max (Sensor2)as Sensor2, max (Sensor3)as Sensor3, t.eventprocessedutctime from (
select 
	case when topicname = 'Sensor1' then value else 0 end as Sensor1
	,case when topicname = 'Sensor2' then value else 0 end as Sensor2
	,case when topicname = 'Sensor3' then value else 0 end as Sensor3
	, eventprocessedutctime
from 	SensorsData) t
group by eventprocessedutctime
...
Рейтинг: 0 / 0
04.11.2020, 11:05
    #40015162
wildegor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транспонирование таблицы
godsql, Огромное спасибо, то что нужно!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Транспонирование таблицы / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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