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

Oracle中使用CASE语句将分两行的NUM_FILES、TOTAL_SIZE合并为一行

调整方案

你当前的查询返回两行的核心原因是:PARTITION_PARAMS表中同一个分区ID(PART_ID)对应numFiles和totalSize两条独立存储的参数记录,同时你的GROUP BY子句包含了pp.PARAM_KEY、pp.PARAM_VALUE两个字段,会按参数名拆分出不同行,每行仅会有一个数值字段有值,另一个为NULL。

修改后的查询语句如下:

SELECT tbl.tbl_name TABLE_NAME, 
       tbl.TBL_ID TBL_ID, 
       pp.PART_ID,
       tbl.tbl_type TABLE_TYPE,
       sds.location TABLE_LOCATION,
       tbl.OWNER TABLE_OWNER,
       dbs.name DATABASE_NAME,
       MAX(CASE pp.PARAM_KEY WHEN 'numFiles' THEN pp.PARAM_VALUE END) AS NUM_FILES,   
       MAX(CASE pp.PARAM_KEY WHEN 'totalSize' THEN pp.PARAM_VALUE END) AS TOTAL_SIZE
FROM TBLS tbl
INNER JOIN SDS ON tbl.tbl_id = sds.cd_id
INNER JOIN DBS ON dbs.db_id = tbl.db_id
LEFT JOIN PARTITIONS ON tbl.TBL_ID = PARTITIONS.TBL_ID 
INNER JOIN PARTITION_PARAMS pp ON pp.PART_ID = PARTITIONS.PART_ID
WHERE pp.PARAM_KEY IN ('totalSize', 'numFiles') 
  AND tbl.tbl_type IN ('MANAGED_TABLE','EXTERNAL_TABLE')
GROUP BY tbl.tbl_name, tbl.TBL_ID, pp.PART_ID, tbl.tbl_type, sds.location, tbl.OWNER, dbs.name
ORDER BY TBL_ID, PART_ID;

主要改动点:

  • 给两个CASE WHEN表达式套上MAX()聚合函数,同一PART_ID下的两行记录会合并为一行,分别取到两个参数对应的值
  • 移除GROUP BY子句中的pp.PARAM_KEY、pp.PARAM_VALUE字段,仅按共同的维度字段分组即可
  • 去掉了冗余的DISTINCT关键字,分组查询本身已经可以保证去重

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:27:04