Это можно сделать, но вы не получите динамический запрос легко.
В качестве комментариев к подсказкам вашего вопроса это может быть проще выполнить с помощью языка программирования, на котором вы фактически выполняете SQL.
Если вы заранее знаете все «категории» (дата столбец в вашем случае), вы можете создать SQL как это:
select
sensorid,
max(case when date = 0 then value else 0 end) as date0,
max(case when date = 1 then value else 1 end) as date1,
max(case when date = 2 then value else 2 end) as date2,
max(case when date = 3 then value else 3 end) as date3,
max(case when date = 4 then value else 4 end) as date4
from
yourtable
group by
sensorid
Вот полный LINQPad скрипт, который вы можете экспериментировать с:
USE master
GO
IF EXISTS (SELECT * FROM sysdatabases WHERE name = 'SO16639641')
DROP DATABASE SO16639641
GO
CREATE DATABASE SO16639641
GO
USE SO16639641
GO
CREATE TABLE original
(
sensorid int,
date_ int,
value int
)
GO
INSERT INTO original
VALUES
(65000, 00, 32),
(65000, 01, 40),
(65000, 02, 35),
(65000, 03, 37),
(65000, 04, 39),
(65001, 00, 06),
(65001, 01, 10),
(65001, 02, 15),
(65001, 03, 26),
(65001, 04, 39)
GO
SELECT
sensorid,
MAX(CASE WHEN date_ = 0 THEN value ELSE 0 END) AS date0,
MAX(CASE WHEN date_ = 1 THEN value ELSE 1 END) AS date1,
MAX(CASE WHEN date_ = 2 THEN value ELSE 2 END) AS date2,
MAX(CASE WHEN date_ = 3 THEN value ELSE 3 END) AS date3,
MAX(CASE WHEN date_ = 4 THEN value ELSE 4 END) AS date4
FROM
original
GROUP BY
sensorid
GO
Или скачать here.
Я также добавил динамическую версию, которая будет определять, какие столбцы даты добавить в соответствии с данными. Немного больше, но вы можете найти оба сценария по вышеуказанной ссылке.
MySQL? SQL Server? Oracle? –
Я бы рекомендовал использовать язык (php, python или что-то еще), который может взаимодействовать с базой данных. Затем вы можете прочитать все идентификаторы из 'data' и систематически генерировать определение таблицы. – alexis
Прошу прощения. Я программирую на SQL Server –