![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как составить запрос [FB1.5]
man Yurik © (2008-01-04 12:24:00)Есть таблица(склад).В ней поля -
дата
получена/выписана
название детатали.
Немогу составить запрос который бы выдал следующий результат: ( т.е. необходимо для конкретной детали получить сколько получено/выписано в день)
дата | кол-во получ детал | кол-во выписан детал | назв детали
Заранее благодарен за ответ.
Johnmen (2008-01-04 21:49:00) [1]
> sniknik © (04.01.08 20:51) [14]
> типа нас тобой? ;о)
Нет. Типа Iskander ©
:)))
sniknik (2008-01-04 20:51:00) [2]> и истинных несомненных гениев?
типа нас тобой? ;о)
Johnmen (2008-01-04 20:28:00) [3]Вот так всегда, пинаешь аффтара, пинаешь, а спасибо за пинок всегда добрым дядям с медвежьей услугой, или по-другому, штрейкбрехерам.
Куда катится мир? Откуда в нем столько пустоголовых ленивцев и истинных несомненных гениев?
man Yurik (2008-01-04 19:58:00) [4]Мда, пожалуй мне действително лучше ReleaseNotes.pdf для FB
Всем спасибо за пинок... Большое - Iskander
man Yurik (2008-01-04 19:46:00) [5]Попробую переделать в процедуру...
Johnmen (2008-01-04 17:41:00) [6]Вообще-то предполагалось, что автор веткидумать начнет...
Iskander (2008-01-04 17:33:00) [7]select a.componentname, a.date,
count(CASE in_out WHEN 'O' THEN 'O' ELSE NULL END) as out_count,
count(CASE in_out WHEN 'I' THEN 'I' ELSE NULL END) as in_count
from sklad a
group by a.componentname, a.date
Johnmen (2008-01-04 17:20:00) [8]Iskander © (04.01.08 17:06) [5]
Вот так писАть в данном случае не рекомендую. Это тормоза.
Johnmen (2008-01-04 17:18:00) [9]
> Результаты не впечатляют
Что это значит?
Уже ж было сказано про CASE. Думалку включаем, да...:)
man Yurik (2008-01-04 17:17:00) [10]Согласен с Вами - мой запрос не впечатляет...-(( Ваш коректно работает. Спасибо всем за внимание
Iskander (2008-01-04 17:06:00) [11]
> Результаты не впечатляют
Вообще-то не результаты, а твой запрос не впечатляет
select a.componentname, a.date,
(select count(*) from sklad b1 where
b1.componentname = a.componentname
and b1.date = a.date
and b1.in_out='O') as out_count,
(select count(*) from sklad b1 where
b1.componentname = a.componentname
and b1.date = a.date
and b1.in_out='I') as in_count
from sklad a
group by a.componentname, a.date
Поправьте меня, мне протестить негде ...
man Yurik (2008-01-04 16:21:00) [12]Извиняюсь запрос выглядит без опечаток так
select a.date, count(a.in_out), count(b.in_out), a.componentname
from sklad a join sklad b on a.date=b.date
where
a.componentname=b.componentname and
a.in_out='O' and b.in_out='I'
group by 1,4
man Yurik (2008-01-04 15:50:00) [13]Спасибо за ответ, но надо получить оборот детали (пришло|ушло) за день
т.е.
дата | кол-во получ детал | кол-во выписан детал | назв детали
Я вот и пытаюсь выполнить запрос типа
select a.date, count(a.in_out), count(a.in_out), a.componentname
from sklad a join sklad b on a.date=b.date
where
a.componentname=b.componentname and
a.in_out='O' and b.in_out='I'
group by 1,2
Результаты не впечатляют -((( может кто укажет где ошибка
Johnmen (2008-01-04 14:44:00) [14]Изучай документацию по SQL на предмет агрегатной функции COUNT и предиката GROUP BY. Ещё наверное CASE WHEN понадобится, но про это уже сказали.
Sergey13 (2008-01-04 12:43:00) [15]Из Firebird_v1.5.5.ReleaseNotes.pdf
SELECT
o.ID,
o.Description,
CASE
WHEN (o.Status IS NULL) THEN 'new'
WHEN (o.Status = 1) THEN 'confirmed'
WHEN (o.Status = 3) THEN 'in production'
WHEN (o.Status = 4) THEN 'ready'
WHEN (o.Status = 5) THEN 'shipped'
ELSE 'unknown status ''' || o.Status || ''''
END
FROM Orders o;
Наверное должно помочь.