我在为查询中需要输出的内容找出正确的语法时遇到了一些麻烦。
这是我的数据(没有这些不是正确的列名,我试图使其更易于阅读)我从中提取的实际表具有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/