2013-03-10 6 views
0

Предположат, что у меня есть таблица, как показано нижеВыбор строк на основе нескольких столбцов

reg sub1 sub2 sub3 
1  A  F  F 
2  F  F  A 
3  A  B  B 
4  A  B  F 
5  A  F  F 

sub1, sub2, sub3 являются тремя различными предметами и значение А, В & Р являются сортами, где А и В имеют место определенных но F не сработает .... Теперь я хочу рег студентов, у которых есть один «F» (т. е. сбой только у одного предмета) и двух предметов, 3 предмета и т. д .... Как сделать tat ... ..

Мой желаемый выход для студентов с одним F (т.е. неисправных только один предмет) является ...

reg sub1 sub2 sub3 
    4  A  B  F 

и студенты с двумя F (т.е. не удалось по двум предметам) является ...

reg sub1 sub2 sub3 
    1  A  F  F 
    2  F  F  A  
    5  A  F  F 
+1

Было бы намного проще, если бы ваш стол был спроектирован по-другому - у вас не должно быть одного столбца на «экзамен». У вас должны быть такие столбцы, как «student_id», «exam», «grade», одна строка для каждого экзамена. – Mat

ответ

0

Во-первых, как сказал @Mat в указанном выше комментарии, это было бы намного легче, если нормировать модель данных.

Во-вторых, я буду считать, что вы ищете SQL-запрос. В-третьих, так как вы не упомянуть все, что база данных системы вы используете (SQL Server, DB2, Oracle, Postgres и т.д.), я покажу решение, которое работает по крайней мере, для SQL Server:

SELECT * 
FROM grades 
WHERE (CASE sub1 WHEN 'F' THEN 1 ELSE 0 END) + 
     (CASE sub2 WHEN 'F' THEN 1 ELSE 0 END) + 
     (CASE sub3 WHEN 'F' THEN 1 ELSE 0 END) = 2 

Это найдет все записи в вашей таблице (grades) с ровно 2 F. То, что он делает, состоит в том, чтобы преобразовать каждый F в 1 и каждый другой класс в 0, затем он строит сумму этих чисел. То есть, он вычисляет число F s для каждой записи.

+0

Спасибо, брату, я получил результат .... sry для того, чтобы не упоминать БД с использованием IBM Db2 ..... На совете о нормализации таблицы, братан, я просто хочу показать рег, отметки их 3 предметов, как указано выше, включая дополнительные детали, как их общее количество, ранг и т. д. Итак, как я могу изменить свою таблицу .... если есть какой-нибудь лучший дизайн, plz скажите мне, что я готов принять его –

+0

Еще одно сомнение в том, как получить имя темы в который студент получил «F» –

+0

Это совсем другой вопрос. Позвольте мне просто так много сказать: 1. Ваша модель данных не содержит данных имени субъекта, поэтому это невозможно. 2. Этот дополнительный вопрос имеет смысл только для запросов для 1 неудавшегося экзамена; если вы запрашиваете 2 неудачных экзамена, нет единого предмета, который студент не смог бы выполнить. 3. Все это будет проще, если вы измените свою модель данных. – stakx

Смежные вопросы