Не соображу как вложит два SQL запроса
-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Всем привет! Такая картина, есть таблица с ФИО, есть таблица с покупками каждого ФИО, т.е связь одни-ко-многим. Нужно сделать запрос который покажет сколько ФИО и на какую сумму сделаны покупки у всех ФИО.
Что-то типа следующего:
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 ))))
Что-то типа следующего:
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 ))))
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
если то что ты спросил это:
фио, кол-во, общ_сумма
то как-то так
[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]
фио, кол-во, общ_сумма
то как-то так
[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]

-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Кричит Ошибка в синтаксиса в предложении From
Между TabFIO и f - ничего быть не должно??? )))
Я использую ADOQuery в Delphi для этого запроса в mdb базе...
Между TabFIO и f - ничего быть не должно??? )))
Я использую ADOQuery в Delphi для этого запроса в mdb базе...
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Разобрался! ))) перед join дописал left и в group by f.fio
Спасибо за совет!
Спасибо за совет!
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Усложнилась малость задача ))) Добавил еще одну таблицу... теперь думаю как ее сюда же прицепить ))
Что-то типа следующего:
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 запросе при добавлении новой таблици в подобном запросе...
Что-то типа следующего:
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 запросе при добавлении новой таблици в подобном запросе...
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
ну да... эт я ступил 
В group by указываются все поля кроме агрегатов.
Если Left join - то в запросе будут фамилии для которых нет покупок, если такое не надо - "inner join"
джойните третью таблицу, в селект добавляете поле района и его же в групбай

В group by указываются все поля кроме агрегатов.
Если Left join - то в запросе будут фамилии для которых нет покупок, если такое не надо - "inner join"
джойните третью таблицу, в селект добавляете поле района и его же в групбай

-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Какой синтаксис у предложения FROM и Join? Т.е. тут я вижу - From <таблица> <left,inner,right> join <таблица> on <условие>
Т.е. куда можно вписать третью и более таблицу и условия? Пробовал From <таблица> <left,inner,right> join <таблица>, <таблица> on <условие> and (or) <условие> - компилятор ругается....
Т.е. куда можно вписать третью и более таблицу и условия? Пробовал From <таблица> <left,inner,right> join <таблица>, <таблица> on <условие> and (or) <условие> - компилятор ругается....
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Дело в том, что все примеры, которые я находил в инете построены на связи всего двух таблиц... а у меня их может быть и три и четыре.....
Только что накопал такой пример -
[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;"
т.е как-будто тут не хватает запятой или еще чаво )))
Только что накопал такой пример -
[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;"
т.е как-будто тут не хватает запятой или еще чаво )))
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
[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]
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]

Dr_Grizzly писал(а):Всем привет! Такая картина, есть таблица с ФИО, есть таблица с покупками каждого ФИО.......
select t1.fieldsTable1 , isnull((select sum(t2.fieldname) from table2 t2 where t1.key=t2.key), 0) as summm from table1 t1