Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / подскажите, как написать запрос / 5 сообщений из 5, страница 1 из 1
26.02.2014, 12:20:07
    #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
26.02.2014, 12:46:40
    #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
26.02.2014, 12:48:42
    #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
26.02.2014, 12:54:54
    #38572768
lynatik50
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите, как написать запрос
Dimitry Sibiryakov,

Спасибо большое)
...
Рейтинг: 0 / 0
26.02.2014, 13:03:16
    #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
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / подскажите, как написать запрос / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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