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

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

Запрос в несколько проходов [D5, Access]


BBCHa ©   (2006-02-01 10:03:00) 

Друзья поможите плз.

Есть табличка с полями: Дата, Клиент, Статус
Статус может быть 1 или 2 или 3
На выходе нужнол получить табличку с полями: Месяц, Клиент, Кол-во статусов=1, Кол-во статусов=2, Кол-во статусов=3
Всего пять столбцов.

Посдкажи те плз, можно ли это вообще реализовать??? И как?:)

Заранее благодарен.


evvcom   (2006-02-02 09:13:00) [1]


> to_number(substr(to_char(Trunc(Dat),'dd.mm.yyyy'),4,2))
> month,

Здесь Trunc лишний. Если все же через ж. делать, то так проще:
to_number(to_char(Dat,'mm'))

Но скорее всего автору также нужен и год, хотя он может и не догадывается об этом. Тогда достаточно просто
select Trunc(Dat, 'MONTH') from ..., а если отображать нужно только месяц, то это уже настраивается на клиенте.


DELORAC   (2006-02-01 17:11:00) [2]


>  [6] Кщд

1. to_number- чтобы был номер, а не строка, мало ли, что там понадобиться
2. конечно же count, как-то не заметил, что набрал...
------------------

>  [7] evvcom ©   (01.02.06 14:09)

Упсс... Конечно же еще и Trunc:
to_number(substr(to_char(Trunc(Dat),'dd.mm.yyyy'),4,2)) month,
;-))


evvcom   (2006-02-01 14:09:00) [3]


> На выходе нужнол получить табличку с полями: Месяц, Клиент,

А год что? Не интересует?

> to_number(substr(to_char(Dat,'dd.mm.yyyy'),4,2)) month,

Еще Trunc имеется в оракле.


Кщд   (2006-02-01 12:38:00) [4]

substr(to_char(Dat,'dd.mm.yyyy'),4,2) != to_char(Dat, 'MM') ?
и зачем to_number?
и не sum, а count


msguns   (2006-02-01 12:33:00) [5]

>BBCHa ©   (01.02.06 12:15) [4]
>Г-н msguns, не судя по вопросу перевести запрос я смог, а Вам рекомендую - если нет конкретного ответа на вопрос, лучше помолчать, внушительнее смотрится.

 Я дал 4 (четыре) конкретныхответа на заданный вопрос
 Вам рекомендую вопросы задавать четко и ясно, чтобы у отвечающих не создавалось впечатления неясности либо двойственности, либо не задавать вообще - не так по-идиотски будете смотреться.


BBCHa   (2006-02-01 12:15:00) [6]

Большое спасибо, друзья, за помощь и поддержку.

Студенты и сессия тут не при чем, г-н DELORAC, если бы самому было думать влом я бы этим и не занимался. Тем не менее спасибо за помощь.

Г-н msguns, не судя по вопросу перевести запрос я смог, а Вам рекомендую - если нет конкретного ответа на вопрос, лучше помолчать, внушительнее смотрится.

Все такие умные... жаль подарить нечего и патроны кончились...


msguns   (2006-02-01 11:03:00) [7]

>DELORAC ©   (01.02.06 10:51) [2]
>Вот пример для Oracle, подозреваю что у тебя какой-нибудь MS SQL или MySQL

Зачем подозревать, если можно прочитать ? Акцес у него.
Судя по вопросу, "перевести" твой запрос он будет не в состоянии ;)


DELORAC   (2006-02-01 10:51:00) [8]

А что, у студентов сессия опять началась?
Самому подумать влом?
Вместо вопроса написал бы лучше запрос...
Вот пример для Oracle, подозреваю что у тебя какой-нибудь MS SQL или MySQL, так что переводи сам...

select
   to_number(substr(to_char(Dat,'dd.mm.yyyy'),4,2)) month,
   Client,
   sum(Decode(cl_status,1,cl_status,0)) cl_status_1,
   sum(Decode(cl_status,2,cl_status,0)) cl_status_2,
   sum(Decode(cl_status,3,cl_status,0)) cl_status_3
from
   Table
group by
   to_number(substr(to_char(Dat,'dd.mm.yyyy'),4,2)),
   Client</CODE


msguns   (2006-02-01 10:15:00) [9]

>можно ли это вообще реализовать???

легко

>И как?

- Одним "хитрым" запросом
- Несколькими запросами и одной временной таблицей
- Все замутить на клиенте, "перебрав" все записи таблицы в цикле и заполнив, например, TStringGrid или CDS+DBGrid "нужного" вида
- Засобачить в акцесе макрос и запускать его из приложения
- Вырвать из левой ноздри три волоса, дунуть-плюнуть на них, сказать "карабарас", повернуться на север и три раза поклониться ;))


Наверх

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