insert - 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 插入查询的解决方案。但是有没有另一种更有效的方法。
谢谢
解决方案
一个基本的数据透视查询可以生成你想要的表:
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
推荐阅读
- vba - 使用 VBA 将 Sheet1 中的(固定范围)迭代列复制到 Sheet2 中的列范围
- php - 如何在 PHP/Laravel 中检索嵌套数组数据?
- sql - SSRS 报告图在 Outlook 中运行良好,但在 gmail 和 Thunderbird 中无法运行
- mysql - 两个表之间的异常报告
- c# - 无法将文件读入结构 MQL5 MT5
- r - 无法在端口 1023 上启动 Julia 连接:所有连接都在使用中
- playframework - 使用带有 scala 的播放框架加载 csv 文件无法加载公共资产的 js 文件
- google-analytics - BigQuery:将旧版 SQL 查询转换为标准 SQL
- junit - Eclemma 不使用 Powermockito
- vue.js - Vue树导航(插件)如何映射路线