![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL Запрос выводит пустоту [FireBird 1.5]
DelphiN! © (2008-07-24 12:11:00)Всем доброго времени суток!
Хочу вывести минимальную, максимальную и среднюю выручку по датам для клиентов тип которых Card User, однако если добавляю условие проверки типа клиента, запрос выводит пустоту, хотя такие клиенты в БД 100% есть.
В чем может быть дело?
select distinct(cast(time_ as date)) DATE_,min(summ_),avg(summ_),max(summ_)
from casebase MAIN where (prim_ <> 'Login activated')
and (prim_ <> 'Login deactivated')and(time_ >= '01.07.2008')and
((select type_ from users where cardno_ = main.cardno_) = 'Card User')
group by 1
order by 1
sniknik (2008-07-24 12:34:00) [1]> делается под запрос ((select type_ from users where cardno_ = main.cardno_) = 'Card User')
простой join в явном виде будет и быстрее и нагляднее...
select *
from casebase с
INNER JOIN users u ON c.cardno_ = u.cardno_
WHERE u.type_ = 'Card User'
возвращает данные? а убрать условие в WHERE?
+
distinct(cast(time_ as date))
нафиг не нужен, раз у тебя по этому полю группировка, оно и так будет уникально по значениям.
DelphiN! (2008-07-24 12:28:00) [2]
> stas © (24.07.08 12:24) [7]
> выбери одного юзера, который точно вернет твой запрос без
> этого условия и выполни отдельно запрос, что он вернул?
> select type_ from users where cardno_ = юзер
Он вернул "Card User"
> Медвежонок Пятачок © (24.07.08 12:24) [8]
>
> and
> ((select type_ from users where cardno_ = main.cardno_)
> = 'Card User')
>
> and exists(select null from users where cardno_ = main.cardno_
> and тип = 'Card User')
Заработало!!! Спасибо всем большущее!!!
Медвежонок Пятачок (2008-07-24 12:25:00) [3]а как его сделать верным я не знаю ... :(
Знаешь, но не признаешься. Надо выучить язык запросов
stas (2008-07-24 12:24:00) [4]выбери одного юзера, который точно вернет твой запрос без этого условия и выполни отдельно запрос, что он вернул?
select type_ from users where cardno_ = юзер
Медвежонок Пятачок (2008-07-24 12:24:00) [5]and
((select type_ from users where cardno_ = main.cardno_) = 'Card User')
and exists(select null from users where cardno_ = main.cardno_ and тип = 'Card User')
DelphiN! (2008-07-24 12:24:00) [6]
> Медвежонок Пятачок © (24.07.08 12:19) [4]
>
> Но у тебя запрос-то не такой
> select * from clients where Users.type_ = "Card User"
По моему предположению
В основном запросе при прохождении каждого пользователя делается под запрос ((select type_ from users where cardno_ = main.cardno_) = 'Card User'), который в свою очередь находит текущего пользователя(из основного запроса) в таблице Users и возвращает его тип, а основной запрос сравнивает, соответствует ли этот тип необходимому.
Но к сожалению мое предположение не является верным, а как его сделать верным я не знаю ... :(
Медвежонок Пятачок (2008-07-24 12:22:00) [7]а зачем Card User снаружи скобок
DelphiN! (2008-07-24 12:20:00) [8]
> stas © (24.07.08 12:19) [3]
>
> Поочереди отключи каждое условие и узнаешь что неправильно.
>
А я знаю какое не правильно, я его выделил жирным((select type_ from users where cardno_ = main.cardno_) = 'Card User')но вот как сделать правильно, не знаю ...
stas (2008-07-24 12:19:00) [9]Поочереди отключи каждое условие и узнаешь что неправильно.
Медвежонок Пятачок (2008-07-24 12:19:00) [10]Но у тебя запрос-то не такой
select * from clients where Users.type_ = "Card User"
DelphiN! (2008-07-24 12:17:00) [11]
> Медвежонок Пятачок © (24.07.08 12:15) [1]
:) Клиенты со значением в поле Users.type_ равным "Card User" - есть!
Медвежонок Пятачок (2008-07-24 12:15:00) [12]запрос выводит пустоту, хотя такие клиенты в БД 100% есть.
1000 % что нет