文中使用的Oracle版本为11g。
一般来说关系型数据库的企业级应用中会存在表关联查询的场景,首当其冲的莫过于主表跟子表进行关联查询。在这种一对多关联查询中难免会出现主表中的某些字段数据重复出现的情况,如下图:
这是一个普通的关联查询,场景用于仓管员核对领用物资使用。从上图可以看出,主子表关联产生像SHEETNAME
、SHEETNO
这两个字段出现大量重复(这里的SheetName和SheetNo是用来导出Excel时用到的)。就上图这样的输出,若直接导出成Excel在数据量大的情况下很容易造成阅读混乱,所以要将这两个字段的重复内容进行合并。使用下面的SQL可以完成:
with xx as(
-- 正常的查询语句
)
select
decode(rn, 1, 字段1) as 字段1,
字段2
from ( select xx.*,row_number() over(partition by 字段 1 order by 字段2 ) rn from xx);
具体例子如下:
执行效果为:
相同的内容会被剔除,很清晰可以看出以SheetName和SheetNo分组的明细内容有哪些,导Excel只需要对空单元格进行单元格合并,或者直接按SheetName分成多个Sheet来展示也是可以的。