powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / подскажите, как написать запрос
5 сообщений из 5, страница 1 из 1
подскажите, как написать запрос
    #38572717
lynatik50
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача найти следующие ситуации:
Если хоть одно из перечисленных полей заполнено, то все перечисленные поля обязательны для заполнения:
• Фамилия;
• Имя;
• Должность;
Делаю так

select count(CHECK_EXPERTS.SYS_GUID) from CHECK_EXPERTS
inner join CHECKS on CHECK_EXPERTS.CHECKFK = CHECKS.SYS_GUID
where
(if (LASTNAME is not null) then (FIRSTNAME is null and POST is null) end
if (FIRSTNAME is not null) then (LASTNAME is null and POST is null) end
if (POST is not null) then (FIRSTNAME is null and LASTNAME is null) end)
and CHECKS.SYS_GUID = @CHECK_ID
and (CHECKS.SYS_STATE IS NULL OR CHECKS.SYS_STATE not in (1,3))


Хотел получить количество записей которые не подходят под условие)
...
Рейтинг: 0 / 0
подскажите, как написать запрос
    #38572756
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lynatik50Хотел получить количество записей которые не подходят под условие)
[/src](LASTNAME is not null OR FIRSTNAME is not null OR POST is not null)
AND
(FIRSTNAME||LASTNAME||POST is null)[/src]
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
подскажите, как написать запрос
    #38572760
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lynatik50,

это что ещё за if внутри запроса?

схематично, потому как ничего толком не понял из приведённого тобой запроса. В следующий раз пользуйся тэгом SRC

Код: sql
1.
2.
3.
4.
5.
6.
select 
  sum(iif(LASTNAME is null, 1, 0)) as cnt_lastname,
  sum(iif(FIRSTNAME is null, 1, 0)) as cnt_lastname,
  sum(iif(POST is null, 1, 0)) as cnt_post
from mytable
where COALESCE(LASTNAME, FIRSTNAME, POST) is not null
...
Рейтинг: 0 / 0
подскажите, как написать запрос
    #38572768
lynatik50
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Спасибо большое)
...
Рейтинг: 0 / 0
подскажите, как написать запрос
    #38572783
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lynatik50Если хоть одно из перечисленных полей заполнено, то все перечисленные поля обязательны для
. . .
Хотел получить количество записей которые не подходят под условие)
Код: sql
1.
2.
3.
4.
select count (*)
from ...
where nullif(trim(lastname),'')||nullif(trim(firstname),'')||nullif(trim(emppost),'') is null
      and coalesce(lastname,firstname,emppost) is NOT null


А вообще, после приведения данных в порядок повесьте на таблицу декларативное ограничение, дабы в след. раз муха не пролетела:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
recreate table ttt(
  lastname varchar(30),
  firstname varchar(30),
  emppost varchar(30),
  constraint all_either_nothing_fill
    check( nullif(trim(lastname),'')||nullif(trim(firstname),'')||nullif(trim(emppost),'') is not null
            or coalesce(lastname,firstname,emppost) is null
         )
);
commit;
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / подскажите, как написать запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]