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

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

Как составить сложный запрос ? [IB4.x, IB5.x, IB6.x, FireBird]


Страницы:   1 2

Вопрос ©   (2008-04-16 22:29:00) 

Есть три таблицы,

1. DOC - Шапка накладной (ключ - Num, Klient - связь с KLN, Data)
2. TOV - Товары накладной (Num - связь с DOC; Кол-во, Цена)
4. KLN  - Клиенты (Klient - ключ, Kod, Name)

нужно сделать запрос, который показывает за период с 01.01.2002 по 12.12.2002 следующее все вместе:

1.Клиент (код и Name)
2.Кол-во заказов из DOC для каждого клиента
3.Сумма заказов (т.е. кол-во всех товаров по всем накл.* цену товара) для каждого клиента
4.Кол-во товаров по всем накладным для каждого клиента

максимум до чего я дошел, так это

select KLN.KLient, KLN.Kod, count(Doc.Num) from KLN,DOC where (Doc.Data>='01.01.2002' and Doc.Data<='01.12.2002') and DOC.NUM=KLN.NUN group by KLN.KLient, KLN.Kod

помогите плс, башка не варит, что там нужно использовать чтобы все это воедино выдать ?

FB/IB


Вопрос   (2008-04-18 12:15:00) [1]

MsGuns, я читал "основы". И простые запросы составлял.  

Дело в том, что этот запрос не составлялся... И мне надо было срочно.  Теперь уже поздно. В результате, вероятно, он мне далее не понадобится. Как не понадобился последние 5 лет в таком объеме :(

Только из интереса  - Пробовал я как раз с where.
В правильном запросе, что мне показали (к сожалению нет его), использовался как раз left inner join если не ошибаюсь...

Ну и дело осложнялось GROUP и аггрегирующими функциями...
Вы б лучше готовый запрос дали, правильный - так легче было б разобратся.


MsGuns   (2008-04-17 21:29:00) [2]

В SQL-запросах для связки между собой двух и более таблиц используется одна из двух конструкций:

1-я

SELECT <Список полей табл.1>,<Список полей табл.2>
 FROM табл.1,табл.2
 WHERE (<поле1 табл.1>=<поле1 табл.2>) AND (<поле2 табл.1>=<поле2 табл.2>)...

В этом случае в результирующий НД будут выбрана информация только тех записей табл.1, которым найдены соотв.записи в табл.2 и к ним присоеденены данные из записей табл.2
Записи табл.1, которым не найдены "пары" из табл.2, выбраны не будут

2-я

SELECT <Список полей табл.1>,<Список полей табл.2>
 FROM табл.1 JOIN табл.2 ON
 (<поле1 табл.1>=<поле1 табл.2> AND <поле2 табл.1>=<поле2 табл.2>,...)

А вот здесь в вых набор попадут все записи табл.1, а вот поля из табл.2, для которых не нашлось записей-"пар" будут содержать пусто.
Впрочем, могут быть и варианты. Все зависит от точности использования ключевого слова JOIN, а точнее его небязательных "спутников": Left/Right и Inner/Outer

В любом случае не полнеитесь и почитайте хотя бы основы SQL (годится встроенная делфи-справка по Local SQL)


Вопрос   (2008-04-17 16:58:00) [3]

Anatoly Podgoretsky сорри, не ваш а Реактора. Работает не так как нужно


Anatoly Podgoretsky   (2008-04-17 16:54:00) [4]

> Вопрос  (17.04.2008 16:17:22)  [22]

> Ваш запрос к сожалению не работает

Такого сообщения ни разу не получал, даже и не знаю, что сказать.


Вопрос   (2008-04-17 16:31:00) [5]

помогите ж, блин :(


Вопрос   (2008-04-17 16:29:00) [6]

Palladin © боюсь, что если я сейчас вот эту проблему не разрешу, в последующие лет 10 направлятся туда (или сюда) не будет никакой необходимости. :(


Вопрос   (2008-04-17 16:24:00) [7]

хелп сейчас мне читать некогда просто. то есть я его читаю,


Вопрос   (2008-04-17 16:23:00) [8]

sniknik © он не выводит все требуемые поля.


sniknik   (2008-04-17 16:20:00) [9]

> Как тогда объясняется это сообщение об ошибке ?
можно отсутствием желания читать хелп

вот тебе вариант с необязательным group
SELECT Count(DOK.DOK) FROM DOK_ZAK_A1 DOK, S_KLIENT1 K;
глупый (изза упомянутого декартового произведения) но рабочий


Palladin   (2008-04-17 16:18:00) [10]


> sniknik ©   (17.04.08 16:13) [19]

здорово, мне понравилось
есть мысль... направлять всех сюда...
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1208434700&n=6


Вопрос   (2008-04-17 16:17:00) [11]

Anatoly Podgoretsky ©   (17.04.08 16:15) [20]

> Разве Group by обязательно должно
Как тогда объясняется это сообщение об ошибке ?

Ваш запрос к сожалению не работает


Вопрос   (2008-04-17 16:16:00) [12]

sniknik как составить этот запрос ? Правильно.


Anatoly Podgoretsky   (2008-04-17 16:15:00) [13]


> Разве Group by обязательно должно применятся для агрегатных
> функций ?

Не обязательно, только не стоит обижаться на декартово произведение и дурной результат.


sniknik   (2008-04-17 16:13:00) [14]

> для чего именно этот форум и существует.
а мне нравится определение недавно прочитанное на sql.ru.

Вопрошающих "Для чего нужен форум?" направлять сюда.

По-моему все притензии тех, кто называет себя новичками, связаны с их восприятием форума как какого-то учебного учереждения с длительным циклом обучения. Например, с десятилетней школой. В которой их проведут с 1го по 10ый класс, старательно вдалбливая сначала азы, а потом по нарастающей все остальные знания. Не забывая при этом про выдачу и проверку домашних заданий, дополнительные занятия для отстающих, факультативы для любознательных и тд. Эдакие седые, мудрые и добрые гуру, окруженные выводком "птенцов", про каждого из которых гуру знает все с момента рождения. Знает чем болел, что любит есть на завтрак. Знает как с ним надо разговаривать и как его надо обучать. И потом машет вслед улетающему заматеревшему "птенцу" рукой, смахивая украдкой слезу.
Так вот, дорогие мои, все это лишь ваши иллюзии.

Форум - это ускоренные курсы решения проблемы. Которые уже подразумевают наличие базовых знаний. А "блеяние" насчет "играл-играл, угадал все буквы, но не смог прочитать слово" - это не для форума.
Для получения базовых знаний нужно образование. Либо самообразование (т.е. чтение документации), либо обучение (т.е. курсы). Но форуме нет времени для подбора методики общения с каждым вопрашающим.
Есть планка. Не выполнил ее - иди "расти".

P.S. Учитесь правильно задавать вопросы:
http://ln.com.ua/~openxs/articles/smart-questions-ru.html

(с) Glory


Вопрос   (2008-04-17 16:09:00) [15]

для чего именно этот форум и существует.


Вопрос   (2008-04-17 16:08:00) [16]

Johnmen © как насчет занятся ответами по делу ?


Johnmen   (2008-04-17 16:06:00) [17]

Как насчет букваря по SQL?


Вопрос   (2008-04-17 16:02:00) [18]

что ненормального в таком запросе : ?

SELECT  K.name, Count(DOK.DOK) FROM   DOK_ZAK_A1 DOK, S_KLIENT1 K;

Разве Group by обязательно должно применятся для агрегатных функций ?

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
user name required.

блин... :(


Вопрос   (2008-04-17 15:39:00) [19]

Johnmen ©  ну раз никому сказать больше нечего-то


Johnmen   (2008-04-17 15:37:00) [20]

Конкурс песни в медицинском институте:
...
Песню: "Тихо сам с собою я веду беседу", - представила кафедра психиатрии.
...

(c)


Страницы:   1 2

Наверх

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