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

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
AnDreYOY
Сообщения: 1
Зарегистрирован: 09 ноя 2009, 23:25

Вроде ерунда...а черт ни как не пойму
Люди добрые помогите, кто чем может.
Есть табличка реест служащих, скажем признак увольнения 1, человек после увольнения может быть снова принят(переведен) на работу признак 0, (не берем периоды работы) т.е. у одеого чел. может быть и 0 и 1, но может быть и только 1 окнчательно уволили. как выбрать только тех у кого есть только 1, т.е. уволен совсем и не принимался снова.
Select .... WHERE (Tabl1.Уволен=1) and ...
Как выбрать только Иванова.?.?.?
Вложения
Безымянный.jpg
Безымянный.jpg (21.11 КБ) 773 просмотра
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Вариантов несколько.
1. Сделать признак с другими вариантами: 0 - работает, 1 - уволен с первого места работы, 2 - работает на втором месте работы, 3 - уволен со второго места и т.д.
2. Сделать два отдельных поля: "работает или нет" и "сколько работ сменил"
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
chur
Сообщения: 195
Зарегистрирован: 17 фев 2004, 10:44
Откуда: Riga, Latvia

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

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

select ФИО from tabl1 group by ФИО having count(уволен)=1 and min(уволен)=1;
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

я бы сделал "Уволен" не 0/1 а дату увольнения. Тогда можно отсортировать по этой дате. Или дату действия добавить, а признак оставить 0/1, но без даты не удобно... К примеру я вот не сразу понял, что у вас добавление строк идёт сверху ;)
Изображение
Laba
Сообщения: 35
Зарегистрирован: 24 мар 2009, 17:47

select фио from x where уволен='1'
minus
select фио from x where уволен='0'
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

chur прав:
select ... from table t1
where 1=(select count(уволен) from table t2
where t1.FIO = t2.FIO
group by уволен
having count(уволен)=1)
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Ответить