Sou um desenvolvedor de software que obteve dados no seguinte formato:
TABLE [dbo].[SensorValues](
[timestamp] [datetime] NOT NULL,
[Sensor1] [float] NULL,
[Sensor2] [float] NULL,
[Sensor3] [float] NULL
)
Gostaria de transformá-la em outra tabela, corresponde ao esquema que minha aplicação espera:
TABLE [dbo].[SensorValuesNormalized](
[Id] [smallint] NOT NULL,
[TimeStamp] [datetime2](3) NOT NULL,
[Value] [real] NOT NULL
)
Id é o número da coluna na tabela original, a coluna X será transformada com X como id.
Posso usar C#
/ Python
para examinar cada linha na tabela de origem e gerar linhas para Sensor1 , Sensor2 e Sensor3 .
Gostaria de saber se existe uma consulta SQL que posso usar para transformar dados da primeira tabela para a segunda, mantendo os dados?
por exemplo
[timestamp] [Sensor1] [Sensor2] [Sensor3]
2012-10-17 05:47:40.387 | 5.0 | 7.3 | NULL
Eu gostaria que a saída fosse:
[Id] [TimeStamp] [Value]
1 2012-10-17 05:47:40.387 5.0
2 2012-10-17 05:47:40.387 7.3
EDIT: Tenho mais de 200 sensores, timestamp é único na tabela original, e não único no destino.
Como você tem um grande número de sensores, provavelmente criaria uma tabela de mapeamento. Aqui está uma demonstração mais completa usando UNPIVOT , por exemplo
NB, o UNPIVOT removerá NULLs.