SQL查询以将选择查询的转置插入到另一个表中

时间:2018-08-16 02:49:57

标签: insert transpose

我有一个表,该表的结构包含以下数据 表1:

DateTime, TagName, Num_Value, Str_Value, Transact_ID
10/8/2016 00:00:00, Batch_Id,NULL,B671,1
10/8/2016 00:00:00, Temperature,70,NULL,1
10/8/2016 00:00:00, Pressure,20,NULL,1
10/8/2016 01:00:00, Batch_Id,NULL,'B672',2
10/8/2016 01:00:00, Temperature,71.6,NULL,2
10/8/2016 01:00:00, Pressure,20.5,NULL,2

我想编写一个存储过程,该过程将遍历这些行,并将所有相似的transact_id值的一行插入到预定义表'Table2'中

表2:

DateTime,BatchID,Temperature,Pressure,Transact_ID
10/8/2016 00:00:00,B671,70,20,1
10/8/2016 01:00:00,B672,71.6,20.5,2

我认为使用sql游标将是遍历table1并创建动态sql插入查询的解决方案。但是还有另一种更有效的方法。

谢谢

1 个答案:

答案 0 :(得分:0)

基本数据透视查询可以生成所需的表:

SELECT
    DateTime,
    MAX(CASE WHEN TagName = 'Batch_Id'    THEN Str_Value END) AS BatchId,
    MAX(CASE WHEN TagName = 'Temperature' THEN Num_Value END) AS Temperature,
    MAX(CASE WHEN TagName = 'Pressure'    THEN Num_Value END) AS Pressure,
    Transact_ID
FROM Table1
GROUP BY
    DateTime,
    Transact_ID;

enter image description here

Demo

该演示是在MySQL中给出的,因为您没有提到要使用的确切数据库,但是查询是通用的,应该在几乎任何种类的SQL上运行。

编辑:如果要使用上述查询填充Table2,则只需执行INSERT INTO ... SELECT

INSERT INTO Table2 (DateTime, BatchID, Temperature, Pressure, Transact_ID)
SELECT ...   -- the query from above