需求:查询的结果集中,某一列存在多个重复的值,需要这个值只显示一次

案例:从表temp中,查部门和员工姓名,要求不通部门值只要一次,这时候可以使用lag可以轻松完成

SELECT decode(lag(t.department) over(ORDER BY department),
              department,
              NULL,
              department) department,
       t.worker_name
  FROM test2 t;

SELECT CASE
         WHEN lag(t.department) over(ORDER BY department,worker_name) = t.department THEN
          NULL
         ELSE
          department
       END department,
       t.worker_name
  FROM test2 t
	ORDER BY t.department,worker_name;

需要注意的是,在最后的order by字句中,department加了前缀,如果不加前缀,我们看下结果:

SELECT CASE
         WHEN lag(t.department) over(ORDER BY department,worker_name) = t.department THEN
          NULL
         ELSE
          department
       END department,
       t.worker_name
  FROM test2 t
	ORDER BY department,worker_name;

文章作者: zlinks
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ZFS的成长之路
Oracle Oracle报表和数据仓库运算
喜欢就支持一下吧