在oracle中,查询正在返回此数据集
DEPT | EMP_NAME | SALARY -----+----------+------- 10 | MARY | 30000 10 | JOHN | 20000 10 | SCOTT | 20000 20 | BOB | 50000 20 | BETTY | 50000
我的目标是做到如下
DEPT | EMP_NAME | SALARY -----+----------+------- 10 | MARY | 30000 | JOHN | 20000 | SCOTT | 20000 20 | BOB | 50000 | BETTY | 50000
部门名称应立即显示,直到新的部门开始。
答案 0 :(得分:0)
假定结果按部门,员工姓名排序,则可以使用LAG函数查找每个部门的第一行。您需要检查每一行,以查看它是否具有与上一行不同的部门,例如:
SELECT CASE /* Check if there's a different department number on this row compared to the previous row */
WHEN NVL(LAG(t.dept) OVER (ORDER BY t.dept, t.emp_name),-1) <> t.dept /* If previous row is null (ie, this is the first row), use -1 as previous dept number so comparison does not fail */
THEN t.dept
END AS display_dept,
t.emp_name,
t.salary
FROM myTable t
ORDER BY t.dept, t.emp_name
正如其他人指出的那样,这实际上并不是SQL要做的;与在查询本身中相比,将这种逻辑用于显示查询结果的方式要好得多。