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

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

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

Кричит Ошибка в синтаксиса в предложении From

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

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

Разобрался! ))) перед join дописал left и в group by f.fio

Спасибо за совет!
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Dr_Grizzly
Сообщения: 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 запросе при добавлении новой таблици в подобном запросе...
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

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

джойните третью таблицу, в селект добавляете поле района и его же в групбай
Изображение
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

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

Т.е. куда можно вписать третью и более таблицу и условия? Пробовал From <таблица> <left,inner,right> join <таблица>, <таблица> on <условие> and (or) <условие> - компилятор ругается....
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Dr_Grizzly
Сообщения: 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;"
т.е как-будто тут не хватает запятой или еще чаво )))
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! 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]
Изображение
kvs2
Сообщения: 1
Зарегистрирован: 15 фев 2009, 20:53

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


select t1.fieldsTable1 , isnull((select sum(t2.fieldname) from table2 t2 where t1.key=t2.key), 0) as summm from table1 t1
Ответить