You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle按另一列分组后在多列中查询的SQL实现咨询

解决方案:Oracle按Item分组合并多列属性值

从你的表结构来看,你需要将同一item下不同type(字符串S、数字N、日期D)对应的属性值合并到单行中,下面是两种常用的Oracle SQL实现方案:

方案1:使用PIVOT函数(Oracle 11g+)

PIVOT是Oracle 11g引入的行转列函数,语法简洁直观,适合处理这种固定类型的行转列需求:

SELECT item,
       s_string_value AS string_value,
       n_number_value AS number_value,
       d_date_value AS date_value
FROM your_table_name
PIVOT (
    MAX(string_value) AS string_value,
    MAX(number_value) AS number_value,
    MAX(date_value) AS date_value
    FOR type IN ('S' AS s, 'N' AS n, 'D' AS d)
)
ORDER BY item;

方案2:条件聚合(兼容所有Oracle版本)

如果你的Oracle版本低于11g,或者需要更好的兼容性,条件聚合是更稳妥的选择,通过CASE WHEN配合聚合函数实现行转列:

SELECT item,
       MAX(CASE WHEN type = 'S' THEN string_value END) AS string_value,
       MAX(CASE WHEN type = 'N' THEN number_value END) AS number_value,
       MAX(CASE WHEN type = 'D' THEN date_value END) AS date_value
FROM your_table_name
GROUP BY item
ORDER BY item;

补充说明

  • 两种方案都会输出类似这样的结果:
    itemstring_valuenumber_valuedate_value
    11abcd134.562017/01/01
    12null134.56null
    13efgh992000/05/21
  • 因为每个item对应每个type最多只有一条记录,所以使用MAX()或MIN()聚合函数都可以,它们会自动忽略NULL值,保留有效数据。
  • 记得把your_table_name替换成你实际的表名。

内容的提问来源于stack exchange,提问作者user2219927

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:26:27