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

Oracle 19如何使用PIVOT函数实现名值对配置表行转列查询

实现方案

你这个场景在Oracle 19下用PIVOT做行转列非常合适,比嵌套标量子查询的写法易维护很多,具体SQL如下:

SELECT HOST, PORT
FROM FDS_MAINT.CONFGRTN_CTGRY_DTL
PIVOT (
    MAX(DISPL_CTGRY_CD)
    FOR CONFGRTN_CTGRY_CD IN (
        'HOST' AS HOST,
        'PORT' AS PORT
        -- 后续要加其他配置列直接在这里追加即可,比如 'TIMEOUT' AS TIMEOUT, 'FROM_ADDR' AS FROM_ADDR
    )
)
WHERE CONFGRTN_CTGRY_ID = 56;

注意点

  • 不需要关联DUAL表,直接对原表过滤后做行转列即可,执行效率比多个重复子查询高,需要返回的配置列越多,性能和代码简洁度的优势越明显。
  • PIVOT语法要求必须指定聚合函数,由于CONFGRTN_CTGRY_ID=56下每个CONFGRTN_CTGRY_CD(配置键)只会对应唯一的DISPL_CTGRY_CD(配置值),用MAX()或者MIN()做聚合都能准确拿到目标值,不会出现数据错误。
  • 后续扩展返回列时,只需要在PIVOT的IN子句里追加对应的配置编码和别名,不用重复编写结构相同的子查询。

执行后就能得到你预期的结果:

HOSTPORT
testapp.silver.com25

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:45:36