Страница 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