【发布时间】:2012-12-05 22:35:03
【问题描述】:
首先,这是我的相关表的数据库架构:
table: students
record_number | forename | surname
table: applications
id | record_number | job_id | status_id
applications 表中的record_number 字段是students 表的外键。我正在尝试编写一些 SQL 以在 APEX 中生成一个条形图,其中显示了接受实习和没有实习的学生数量。
如果学生有已接受的申请,则status_id 字段为7。其他任何事情,他们都没有接受的申请。到目前为止,这是我所得到的:
SELECT NULL AS link, 'Placed' AS label, COUNT(*) AS value
FROM tbl_students students
JOIN tbl_applications applications USING (record_number)
WHERE applications.status_id = 7
UNION
SELECT NULL AS link, 'Unplaced' AS label, CASE COUNT(*) AS value WHEN value > 1 THEN 1 END
FROM tbl_students students
JOIN tbl_applications applications USING (record_number)
WHERE applications.status_id != 7
问题是,一个学生可以有很多实习,而且一次只能接受其中一个。这对于上面的第一个查询很好。但是,一个学生可以有许多未接受的实习,第二个查询将它们全部计数,而不是只计数一次(以表明 +1 学生没有未接受的实习)。
我怎样才能使查询只计算一次没有接受实习的学生,而不是将他们计算到他们有多少未接受的实习?我尝试使用 CASE 语句,但它引发了语法错误。
谢谢。
【问题讨论】:
标签: sql oracle oracle-apex