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子句里追加对应的配置编码和别名,不用重复编写结构相同的子查询。
执行后就能得到你预期的结果:
| HOST | PORT |
|---|---|
| testapp.silver.com | 25 |
内容的提问来源于stack exchange,提问作者Chad
相关产品推荐
相关产品推荐

