Sql 如何将行值显示为列?
我有这张桌子:Sql 如何将行值显示为列?,sql,oracle,plsql,Sql,Oracle,Plsql,我有这张桌子: 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
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列中获取值,并使它们成为列。
并将参数值作为值。
但仅显示一次PY_DATIME和字段代码
表的主键是(字段代码、PY数据时间、参数名称)
谢谢。您可以为此使用条件聚合——假设您事先知道所需的列:
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;
您可以为此使用条件聚合——假设您事先知道所需的列:
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;
检查
PIVOT
子句,它应该允许您实现您想要的。检查PIVOT
子句,它应该允许您实现您想要的。