Q:

Get rid of duplicate lines in SQL result set

I have 2 tables which I use to get a result set from
select 
a.id,
a.test,
a.score,
b.name,
b.person,
b.grade
from table_test a, table_pers b 
where a.test=b.test 

now the problem is that table b has multiple entries which are all the same but for "passed"... now if passed is yes and no to 1 person I only need the yes result row and only that one otherwise I need the no row and only onw of them if there are multiple.
Any idea on how that could work?
Thanks in advance.
Ok since the case doens't like the group by here is a more detailed view on the select:
select
t.id,
t.tests test,
t.lang,
m.title_TEXT Titel, 
m.Sched Schedual,
m.prof profs, 
m.date_out Date,
m.sub subject,
m.chan Changes, 
case
when m.cha2 = ''
then m.cha1
else m.cha2
end as last_change,
case
when m.datac2 = ''
then m.datac1
else m.datac2
end as Change_date,         
t.posp,
t.A1,
t.B1,
t.Failed,
t.analy,         
t.vect,
t.cover,
t.typ,
t.circ,
t.deadline
from table_test t, table_pers m where m.test=t.test

The values I look at in t.passed are '1A' and '1B' 
If there is a 1A then then I need that row if tehre is only 1B then I need one of those rows. 
The complete select has 39 fields.. but those missing are just normal selects no cases or things like that.

A:

You can take advantage of the fact that 'Yes' > 'No', so you could just use:
select  a.id,
        a.test,
        a.score,
        b.name,
        b.person,
        b.grade,
        MAX(Passed) AS Passed
from    table_test a
        INNER JOIN table_pers b 
            ON a.test = b.test
GROUP BY a.id, a.test, a.score, b.name, b.person, b.grade;

N.B. I have switched your ANSI 89 JOINs to the new ANSI 92 JOIN syntax. This article covers some good reasons for doing so, however it is subjective and the choice is ultimately yours, the result is the same either way.
An alternative, and possibly more rubust solution (if you have other different allowed values for passed) would be:
select  a.id,
        a.test,
        a.score,
        b.name,
        b.person,
        b.grade,
        CASE WHEN COUNT(CASE WHEN Passed = 'Yes' THEN 1 END) > 0 THEN 'Yes' ELSE 'No' END AS Passed
from    table_test a
        INNER JOIN table_pers b 
            ON a.test = b.test
GROUP BY a.id, a.test, a.score, b.name, b.person, b.grade;

EDIT
There is no reason I know of that CASE won't work in a group by (unless you are using the alias in the group by and not the full case statement), however you could also achieve this using the ROW_NUMBER() function:
SELECT  *
FROM    (   SELECT  t.id,
                    t.tests test,
                    t.lang,
                    m.title_TEXT Titel, 
                    m.Sched Schedual,
                    m.prof profs, 
                    m.date_out Date,
                    m.sub subject,
                    m.chan Changes, 
                    case when m.cha2 = '' then m.cha1 else m.cha2 end as last_change,
                    case when m.datac2 = ''then m.datac1 else m.datac2 end as aenderungsdatumChange_date,      
                    t.posp,
                    t.A1,
                    t.B1,
                    t.Failed,
                    t.analy,         
                    t.vect,
                    t.cover,
                    t.typ,
                    t.circ,
                    t.deadline,
                    ROW_NUMBER() OVER(PARTITION BY t.ID ORDER BY t.Passed) AS rn
            from    table_test t
                    INNER JOIN table_pers m 
                        ON m.test = t.test
        ) t
WHERE   rn = 1

