【发布时间】:2018-07-18 16:35:47
【问题描述】:
上下文:这个人参加了几门课,他的 ID 和所学的课程存储在 Oracle 数据库中的不同行中。
主要目标:我想看看一个人是否至少上过几门课中的一门,然后将他标记为“是”,如果不是,则标记为“否”。
我的简化代码:
SELECT DISTINCT
ID AS Person_ID,
(CASE WHEN CLASS_TAKEN IN ('A','B','C')
THEN 'Yes'
ELSE 'No'
END) AS Mark
FROM classes_taken_table
Group By
ID,
CLASS_TAKEN
ORDER BY ID ASC
问题:代码在大多数情况下都可以工作,除了当人同时接受 A 类和 D 类时。现在在输出中为同一个人生成两行,一行在标记列中为“是”,另一行为“否” .
如果此人已有“是”行,我想为他删除“否”行。
我尝试了 Max 函数,但无法合并 2 行。这似乎很简单,但无法绕过它。 :(
【问题讨论】:
-
如果一个人先拿 D 和 A 怎么办?我们还需要显示这个人吗?
-
是的。在这种情况下,顺序无关紧要。因此,在您的情况下,该人仍然会有一行 Mark column= 'Yes'