首页 > 解决方案 > SQL Query 将选择查询的转置插入另一个表

问题描述

我有一个表,其结构包含以下数据 Table1:

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 插入查询的解决方案。但是有没有另一种更有效的方法。

谢谢

标签: inserttranspose

解决方案


一个基本的数据透视查询可以生成你想要的表:

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;

在此处输入图像描述

演示

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

编辑:如果您想Table2使用上述查询进行填充,那么只需执行以下操作INSERT INTO ... SELECT

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

推荐阅读