如何解决如何根据每个测试周期选择特定值?
现在我在SQL Server表中有一个原始数据,其中列出了数据传输速度和设备的温度。
key | value
----------------
test_unit | AX45CG00598
speed_01 | 142.00
speed_02 | 138.00
speed_03 | 155.00
start_temp_01 | 31.04
start_temp_02 | 33.50
start_temp_03 | 33.88
end_temp_01 | 33.87
end_temp_02 | 34.29
end_temp_03 | 34.64
我要根据输出的测试周期来选择值
test_unit | cycle | speed | start_temp | end_temp
-------------------------------------
AX45CG00598 | #01 | 142.00 | 31.04 | 33.87
AX45CG00598 | #02 | 138.00 | 33.50 | 34.29
AX45CG00598 | #03 | 155.00 | 33.88 | 34.64
这是我的代码,它基于每个周期输出周期和速度。
SELECT
(select value from unnest(sql_server_table) where key = 'test_unit') as test_unit,case
when key = 'speed_01' then '#01'
when key = 'speed_02' then '#02'
when key = 'speed_03' then '#03'
end as cycle,props.value,FROM
unnest(sql_server_table) props
WHERE
props.key in ('speed_01','speed_02','speed_03')
但是,我不知道如何在temperature
的同一行中列出speed
。
请指教,谢谢。
解决方法
以下基于示例数据的示例适用于BigQuery Standard SQL
#standardSQL
WITH `project.dataset.table` AS (
SELECT 1 id,[
STRUCT<key STRING,value STRING>('test_unit','AX45CG00598'),('speed_01','142.00'),('speed_02','138.00'),('speed_03','155.00'),('start_temp_01','31.04'),('start_temp_02','33.50'),('start_temp_03','33.88'),('end_temp_01','33.87'),('end_temp_02','34.29'),('end_temp_03','34.64')
] props
)
SELECT id,MAX(IF(key = 'test_unit',value,NULL)) test_unit,'#' || cycle AS cycle,MAX(IF(key = 'speed_' || cycle,NULL)) speed,MAX(IF(key = 'start_temp_' || cycle,NULL)) start_temp,MAX(IF(key = 'end_temp_' || cycle,NULL)) end_temp
FROM `project.dataset.table` t,UNNEST(props) prop,UNNEST(['01','02','03']) cycle
GROUP BY id,cycle
有输出
Row id test_unit cycle speed start_temp end_temp
1 1 AX45CG00598 #01 142.00 31.04 33.87
2 1 AX45CG00598 #02 138.00 33.50 34.29
3 1 AX45CG00598 #03 155.00 33.88 34.64
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。