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

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

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

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

09 ноя 2009, 23:31

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

10 ноя 2009, 09:06

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

10 ноя 2009, 10:35

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

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

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

10 ноя 2009, 11:24

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

12 ноя 2009, 11:24

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

13 ноя 2009, 14:29

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
Ответить