Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как составить запрос [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;

Наверное должно помочь.


Наверх

Титульная страница Поиск, карта сайта Написать письмо