生成报表时如果两行的同一列包含相同值,希望这个值仅显示一次。例如,要从表EMP中找出DEPTNO 和ENAME,按DEPTNO给所有行分组,而且DEPTNO仅显示一次。希望返回如下的结果集:
解决方案:
ORACLE
使用窗口函数LAG OVER,访问当期行的前几行,以便为每个分区找到第一个DEPTNO:
SELECT to_number(decode(lag(deptno) over(ORDER BY deptno),
deptno,
NULL,
deptno)) deptno,
ename
FROM scott.emp
讨论:
观察上面的结果集就会明白,对于DEPTNO与LAG_DEPTNO相匹配的行,需要把EPTNO设置为NULL,使用DECODE就可。