sql - 如何将行值显示为列?
问题描述
我有这张桌子:
FIELD_CODE PY_DATIME PARAM_NAME PARAM_VAL
F262/034 29-JAN-2021 IRRIGATION_AMOUNT 0
F262/034 29-JAN-2021 MAX_TS_20 250
F262/034 29-JAN-2021 MAX_TS_40 168
F262/034 29-JAN-2021 ET 1.616806
F262/034 30-JAN-2021 MDS 25
F262/034 30-JAN-2021 GROWTH -8.333333
F262/034 30-JAN-2021 PLANT_STATUS 90
F262/034 30-JAN-2021 IRRIGATION_AMOUNT 0
F262/034 30-JAN-2021 MAX_TS_20 81
F262/034 30-JAN-2021 MAX_TS_40 83
F262/034 30-JAN-2021 ET 1.1099839
F262/034 31-JAN-2021 MDS 56.666668
F262/034 31-JAN-2021 GROWTH 18.333334
F262/034 31-JAN-2021 PLANT_STATUS 70
F262/034 31-JAN-2021 IRRIGATION_AMOUNT 0
F262/034 31-JAN-2021 MAX_TS_20 114
F262/034 31-JAN-2021 MAX_TS_40 95
F262/034 31-JAN-2021 ET 2.2792487
我想显示这样的数据:
FIELD_CODE PY_DATIME MDS GROWTH PLANT_STATUS IRRIGATION_AMOUNT MAX_TS_20 MAX_TS_40 ET
我需要从 PARAM_NAME 列中获取值并将它们设为列。并将 PARAM_VAL 作为值。但只显示一次 PY_DATIME 和 FIELD_CODE。
表的主键是 (FIELD_CODE, PY_DATIME, PARAM_NAME)
谢谢。
解决方案
您可以为此使用条件聚合——假设您事先知道所需的列:
select field_code, py_datetime,
max(case when param_name = 'MDS' then param_val end) as mds,
max(case when param_name = 'GROWTH' then param_val end) as GROWTH,
max(case when param_name = 'PLANT_STATUS' then param_val end) as PLANT_STATUS,
max(case when param_name = 'IRRIGATION_AMOUNT' then param_val end) as IRRIGATION_AMOUNT,
max(case when param_name = 'MAX_TS_20' then param_val end) as MAX_TS_20,
max(case when param_name = 'MAX_TS_40' then param_val end) as MAX_TS_40,
max(case when param_name = 'ET' then param_val end) as ET
from t
group by field_code, py_datetime;
推荐阅读
- assembly - 执行 asm 程序后不要在 shell 中换行。[美国电话电报]
- angular - 使用角度为 8 的无类型传单会导致问题
- reactjs - 如何调用 React Hooks useEffect() 中定义的 onClick 函数?
- angular - 如何从asp.net核心下载带有角度的fileStream
- vue.js - Ionic 4,Ionicon 库添加自定义图标
- php - 如果我的环境是生产环境,如何查看视图?
- java - 注册匿名类功能
- typescript - v-on 监听器中的 Vue $emit 不起作用
- c# - 如何在 C# 中获取 DataGridView 中的主键?
- django - 来自 docker-compose 命令的行为与在 Dockerfile 中运行的行为不同