SQL 将 select 查询的转置插入另一个 table 的查询
SQL Query to insert transpose of a select query into another table
我有一个 table 具有以下数据的结构
表 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 值的一行插入预定义的 table '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 插入查询的解决方案。但是有没有其他更有效的方法呢
谢谢
基本数据透视查询可以生成您想要的table:
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
我有一个 table 具有以下数据的结构 表 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 值的一行插入预定义的 table '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 插入查询的解决方案。但是有没有其他更有效的方法呢
谢谢
基本数据透视查询可以生成您想要的table:
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