sql - 限制行输出

标签 sql oracle limit oracle8i

我在为查询中需要输出的内容找出正确的语法时遇到了一些麻烦。

这是我的数据(没有这些不是正确的列名,我试图使其更易于阅读)我从中提取的实际表具有26列数据。

employeeNumber - recordNumber - job                - dept - type
 12            - 1            - stapler            - 788  - s
 12            - 6            - paper pusher       - 400  - s
 18            - 2            - phone cleaner      - 600  - p
 18            - 4            - sweeper            - 567  - s
 19            - 0            - typist             - 400  - s
 21            - 0            - mouse ball cleaner - 400  - p


因此,以下是选择规则:
如果类型为P,则选择该记录
如果员工没有P记录,则选择S
如果员工有多个S记录,请选择较低的记录号或选择“部门”不是400的记录(400行始终是较高的记录号)
如果只有一个S记录,并且Dept是400,则应返回该行

这是当前正在工作的:

SELECT employeeNumber, recordNumber, job, dept, type
FROM employees
WHERE (type = 'P')
 OR
 (type = 'S'
            AND employeeNumber NOT IN
                (
                  SELECT employeeNumber
                  FROM employees
                  WHERE type = 'P'
                )
)
ORDER BY employeeNumber, recordNumber


我想做的是在末尾加上“ limit = 1”(或类似内容),以便在有多个S行的情况下,较低的recordNumber将是返回的行。

这是应该从上面的数据中返回的记录集:

employeeNumber - recordNumber - job                - dept - type
 12            - 1            - stapler            - 788  - s
 18            - 2            - phone cleaner      - 600  - p
 19            - 0            - typist             - 400  - s
 21            - 0            - mouse ball cleaner - 400  - p


像泥一样清澈,对不对?

我不断出错。有没有一种我只是想念的“简便”方法?

谢谢你提供的所有帮助。

蜜雪儿

最佳答案

我对这部分的理解不是很好:


选择较低的记录号或选择部门所在的记录
不是400(400行将始终是较高的记录号)


(如果“ 400行将始终是较高的记录号”,那么“或”的左侧部分就足够了)

但是,这是一个起点。(我在OR之后解雇了该部分)

SELECT * FROM (
    SELECT employeeNumber, recordNumber, job, dept, type
    rank() over (partition by employeeNumber order by type, recordNumber) as rnk
    FROM employees
)
WHERE type = 'P' or (rnk=1 and type=S)

关于sql - 限制行输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8669567/

相关文章:

大数据MySQL数据库设计

java - 使用Oracle序列将日志id从jdbc插入到2个表中?

mysql - 在 MySQL 的 LIMIT 子句中使用变量

java ldapsearchException 超出 setMaxResults 大小限制

sql - DB2 触发器语法之前

mysql - sql.Result.LastInsertId() 的线程安全

mysql - 笛卡尔积单表

oracle - 随机获取 "ORA-22814: attribute or element value is larger than specified in type"并批量收集到

mysql - 从 MySQL 查询数据到 Oracle

kubernetes - k8s 中的 cpu 限制大小应该确定为多少?