Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование iif, iif 
:(
    Опции темы
AndyMur
  Дата 8.4.2009, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 22.3.2008
Где: Russia

Репутация: нет
Всего: нет



Здравствуйте.

В Firebird 2.0 есть ужасно полезная функция iif, которая может быть использована в списке выборки атрибутов запроса.

Достаточно громоздкий, но всё же пример

Код

select
  lessons.id,
  lessons.lessontheme,
  lessons.lessondate,
  lessons.homework,
  lessons.teacherid,
  users.surname,
  users.name,
  users.patronymic,
  lessons.subjectid,
  subjects.subjectname,
  marks.markvalue,
  IIF(marks.pupilid <> :pid, null, 44636) as "p"
from lessons
join users on lessons.teacherid = users.id
join subjects on lessons.subjectid = subjects.id
left join marks on marks.lessonid = lessons.id
where
  lessons.classid = 4947145
  and lessons.lessondate between :start and :stop
--  and (marks.pupilid = :pid or (p is null))


Если оставить последнюю строчку закомментированной - всё хорошо. Проблема в том, что по умолчанию столбец вида IIF(marks.pupilid <> :pid, null, 44636)  Firebird обзывает как case, а  мне надо не только дать ему осмысленное имя (через as) но и использовать в секции отбора where. Открытие комментария результата не дает - ошибка синтаксиса. Так вот это вообще возможно? Использование такого вычисляемого поля...или придется делать с подзапросом/внутри ХП? 

Заранее извиняюсь за не очень удобный пример, готов переписать.
Спасибо.
PM MAIL WWW ICQ   Вверх
Akella
Дата 8.4.2009, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Извини, может ещё не проснулся. Но я не совсем понял, в чём проблема.
PM MAIL   Вверх
DimW
Дата 8.4.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 1
Всего: 44



Цитата(AndyMur @  8.4.2009,  10:40 Найти цитируемый пост)
или придется делать с подзапросом/внутри ХП? 


не обязательно:
1) 
Код

where
  lessons.classid = 4947145
  and lessons.lessondate between :start and :stop
  and (marks.pupilid = :pid or (IIF(marks.pupilid <> :pid, null, 44636) is null))


2)
Код

select *
  from (select lessons.id
              ,lessons.lessontheme
              ,lessons.lessondate
              ,lessons.homework
              ,lessons.teacherid
              ,users.surname
              ,users.name
              ,users.patronymic
              ,lessons.subjectid
              ,subjects.subjectname
              ,marks.markvalue
              ,IIF(marks.pupilid <> :pid, null, 44636) as "p"
          from lessons
          join users on lessons.teacherid = users.id
          join subjects on lessons.subjectid = subjects.id
          left join marks on marks.lessonid = lessons.id
         where lessons.classid = 4947145
           and lessons.lessondate between :start and :stop)
 where p is null -- или что там нужно на самом деле

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0630 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.