Страница 1 из 1

Не соображу как вложит два SQL запроса

Добавлено: 12 дек 2008, 09:30
Dr_Grizzly
Всем привет! Такая картина, есть таблица с ФИО, есть таблица с покупками каждого ФИО, т.е связь одни-ко-многим. Нужно сделать запрос который покажет сколько ФИО и на какую сумму сделаны покупки у всех ФИО.

Что-то типа следующего:
TabFio

key----FIO
1----Иванов
2----Петров

TabPok
key---keyFIO---NameTov---Summa
1---1---Пряник---2000
2---1---Мыло---500
3---2---Тапочки---100

Вот два запроса которые выводят данные в разные таблицы

Select count(fio) from TabFio

Второй запрос

Select Fio,sum(summa) from tabfio,tabpok where tabfio.key=tabpok.keyfio group by fio

Вот теперь нужно как-то это запихнуть в один SQL запрос )))) чтоб данные отобразились в одной таблице. Просто если я во второй запрос впишу count(fio) то у меня получится что количество фио = 3, а на самом деле 2 ))))

Re: Не соображу как вложит два SQL запроса

Добавлено: 12 дек 2008, 09:38
Игорь Акопян
если то что ты спросил это:
фио, кол-во, общ_сумма
то как-то так
[syntax='SQL']
select
f.fio, count(p.keyFIO), Sum(p.Summa)
from
TabFIO f
join TabPok p on p.keyFIO=f.Key
group by
f.fio
[/syntax]

Re: Не соображу как вложит два SQL запроса

Добавлено: 16 дек 2008, 13:49
Dr_Grizzly
Кричит Ошибка в синтаксиса в предложении From

Между TabFIO и f - ничего быть не должно??? )))

Я использую ADOQuery в Delphi для этого запроса в mdb базе...

Добавлено: 16 дек 2008, 14:01
Dr_Grizzly
Разобрался! ))) перед join дописал left и в group by f.fio

Спасибо за совет!

Re: Не соображу как вложит два SQL запроса

Добавлено: 17 дек 2008, 08:14
Dr_Grizzly
Усложнилась малость задача ))) Добавил еще одну таблицу... теперь думаю как ее сюда же прицепить ))

Что-то типа следующего:
Raions
key----RaionName
1----Шумиха
2----Бутырка
3---Лобзино

TabFio

key----FIO----raionkey
1----Иванов----1
2----Петров----2
3----Семенов----1

TabPok
key---keyFIO---NameTov---Summa
1---1---Пряник---2000
2---1---Мыло---500
3---2---Тапочки---100
4---3---Утюг---1000


Запрос такой, нужно узнать в разрезе районов - сколько человек в каждом районе, и на какую сумму в каждом районе сделаны покупки....

Я хочу понять, принцип наращивания связей в SQL запросе при добавлении новой таблици в подобном запросе...

Re: Не соображу как вложит два SQL запроса

Добавлено: 17 дек 2008, 10:38
Игорь Акопян
ну да... эт я ступил :)
В group by указываются все поля кроме агрегатов.
Если Left join - то в запросе будут фамилии для которых нет покупок, если такое не надо - "inner join"

джойните третью таблицу, в селект добавляете поле района и его же в групбай

Re: Не соображу как вложит два SQL запроса

Добавлено: 19 дек 2008, 07:42
Dr_Grizzly
Какой синтаксис у предложения FROM и Join? Т.е. тут я вижу - From <таблица> <left,inner,right> join <таблица> on <условие>

Т.е. куда можно вписать третью и более таблицу и условия? Пробовал From <таблица> <left,inner,right> join <таблица>, <таблица> on <условие> and (or) <условие> - компилятор ругается....

Re: Не соображу как вложит два SQL запроса

Добавлено: 19 дек 2008, 08:11
Dr_Grizzly
Дело в том, что все примеры, которые я находил в инете построены на связи всего двух таблиц... а у меня их может быть и три и четыре.....


Только что накопал такой пример -
[Sql]
SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id
LEFT JOIN table3 ON table2.id=table3.id;
[/Sql]

Ругается на то, что пропущен оператор в выражении "table1.id=table2.id LEFT JOIN table3 ON table2.id=table3.id;"
т.е как-будто тут не хватает запятой или еще чаво )))

Re: Не соображу как вложит два SQL запроса

Добавлено: 19 дек 2008, 10:30
Игорь Акопян
[syntax='SQL']
SELECT
r.RaionName, f.fio, count(p.keyFIO), Sum(p.Summa)
FROM
TabFIO f
INNER JOIN TabPok p ON p.keyFIO=f.KEY
INNER JOIN Raions r ON f.RaionKEY = r.Key
GROUP BY
r.RaionName, f.FIO
[/syntax]

Акцесс по-моему также хочет множество скобок, где и как - лучше посмотреть там ;)

формат тэга:
[noparse][syntax='SQL'] select ... [/syntax] [/noparse]

Re: Не соображу как вложит два SQL запроса

Добавлено: 15 фев 2009, 20:59
kvs2
Dr_Grizzly писал(а):Всем привет! Такая картина, есть таблица с ФИО, есть таблица с покупками каждого ФИО.......


select t1.fieldsTable1 , isnull((select sum(t2.fieldname) from table2 t2 where t1.key=t2.key), 0) as summm from table1 t1