Страница 1 из 1

Запрос На выборку

Добавлено: 09 ноя 2009, 23:31
AnDreYOY
Вроде ерунда...а черт ни как не пойму
Люди добрые помогите, кто чем может.
Есть табличка реест служащих, скажем признак увольнения 1, человек после увольнения может быть снова принят(переведен) на работу признак 0, (не берем периоды работы) т.е. у одеого чел. может быть и 0 и 1, но может быть и только 1 окнчательно уволили. как выбрать только тех у кого есть только 1, т.е. уволен совсем и не принимался снова.
Select .... WHERE (Tabl1.Уволен=1) and ...
Как выбрать только Иванова.?.?.?

Re: Запрос На выборку

Добавлено: 10 ноя 2009, 09:06
Хыиуду
Вариантов несколько.
1. Сделать признак с другими вариантами: 0 - работает, 1 - уволен с первого места работы, 2 - работает на втором месте работы, 3 - уволен со второго места и т.д.
2. Сделать два отдельных поля: "работает или нет" и "сколько работ сменил"

Re: Запрос На выборку

Добавлено: 10 ноя 2009, 10:35
chur
Если такие запросы постоянно используются, то, конечно, лучше структуру таблицы переделать так, чтобы на одно ФИО одна запись была. Хыиуду несколько вариантов предложил.

А к существующей таблице можно обратиться как-то так:

select ФИО from tabl1 group by ФИО having count(уволен)=1 and min(уволен)=1;

Re: Запрос На выборку

Добавлено: 10 ноя 2009, 11:24
Игорь Акопян
я бы сделал "Уволен" не 0/1 а дату увольнения. Тогда можно отсортировать по этой дате. Или дату действия добавить, а признак оставить 0/1, но без даты не удобно... К примеру я вот не сразу понял, что у вас добавление строк идёт сверху ;)

Re: Запрос На выборку

Добавлено: 12 ноя 2009, 11:24
Laba
select фио from x where уволен='1'
minus
select фио from x where уволен='0'

Re: Запрос На выборку

Добавлено: 13 ноя 2009, 14:29
Airhand
chur прав:
select ... from table t1
where 1=(select count(уволен) from table t2
where t1.FIO = t2.FIO
group by уволен
having count(уволен)=1)