SQL Select Distinct决定保留哪条记录

时间:2013-12-10 17:00:43

标签: sql visual-studio

我有一个查询,其中列出了尚未通过评估的人,并希望添加一个列以显示他们是否尝试过。如果他们没有尝试过,则字段为null,如果他们已尝试显示failed。我已经从相关的评估表中显示了这一点,但是当一个人有一个failed时,它也会在状态列中显示另一行没有任何内容(这是因为他们可以通过两个课程中的一个,所以可能有一个失败的记录而没有访问另一个)。我在主查询中使用select distinct。我理解为什么我不能在某些列上使用distinct,因为它不知道要显示哪些记录。

有什么办法可以在Visual Studio中使用SQL或表达式来合并两者,确保保留failed状态?它只需要为了报告的利益而完成,因此无论它是否在Visual Studio中都无关紧要。

ID    firstname    surname    lessonstatus
------------------------------------------
27    joe          bloggs      
47    mickey       mouse
47    mickey       mouse      Failed

我希望它显示如下:

ID    firstname    surname    lessonstatus
------------------------------------------
27    joe          bloggs      
47    mickey       mouse      Failed

在数据库中,米老鼠在数据库中两次,两次课程分别为一次,但为了本报告的目的,我不需要显示课程,我只需要在列表中显示一次因为没有通过他们中的任何一个。如果他们失败了,我想保留Failed条目,以表明至少他们已尝试过这两门课程中的一门或另一门

2 个答案:

答案 0 :(得分:1)

如果没有表格布局,很难回答,但假设你有一个带有stame结构的评估表,这应该可以解决问题:

SELECT ID, firstname, surname, MAX(lessonstatus) FROM(
    SELECT * FROM assessment1
    UNION
    SELECT * FROM assessment2
) GROUP BY ID, firstname, surname 

答案 1 :(得分:0)

这样的东西将提供你所需要的东西。

select p.name
, coalesce(a.value, 'no attempt') result
from person p left join assessment a on a.personId = p.personID
and a.value <> 'pass'
etc

当然,您需要自己的表名。此外,评估表上的所有过滤都必须在from子句中完成。如果在where子句中尝试它,则连接变为内部。