我有一个表,该表的结构包含以下数据 表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插入查询的解决方案。但是还有另一种更有效的方法。
谢谢
答案 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;
该演示是在MySQL中给出的,因为您没有提到要使用的确切数据库,但是查询是通用的,应该在几乎任何种类的SQL上运行。
编辑:如果要使用上述查询填充Table2
,则只需执行INSERT INTO ... SELECT
:
INSERT INTO Table2 (DateTime, BatchID, Temperature, Pressure, Transact_ID)
SELECT ... -- the query from above