Страница 1 из 3
Запрос на обновление записи
Добавлено: 29 янв 2008, 13:09
Dr_Grizzly
Всем привет! Такая вот ситуация, есть две таблицы:
Tab1
key,FIO,ADRES,SUM
Tab2
fiokey,Name,kol,sum
Делаю запрос
Select sum(tab2.sum) from tab1,tab2 where key=fiokey
Group by tab1.fio
Показывает четкую таблицу суммам покупок. А теперь бы сделать так чтоб она посчитала сумму покупок у ФИО и записала результат в поле tab1.sum. Такое можно реализовать или я брежу уже? ))))
Re: Запрос на обновление записи
Добавлено: 29 янв 2008, 15:42
Владимир
Предлагаю такой вариант
Код: Выделить всё
UPDATE tab1
SET tab1.sum = SubQ.Sum_purch
FROM
(SELECT t1.fio as Fio, sum(t2.sum) AS Sum_purch
FROM tab1 AS t1 JOIN tab2 AS t2 ON t1.key=t2.fiokey
GROUP BY t1.fio) AS SubQ
WHERE tab1.fio = SubQ.Fio
Re: Запрос на обновление записи
Добавлено: 31 янв 2008, 19:12
Dr_Grizzly
SubQ.Sum_purch - а это что за табличка? она временная? или это там результат будет?
Re: Запрос на обновление записи
Добавлено: 31 янв 2008, 21:55
Serge_Bliznykov
возьму на себя наглость ответить..
Dr_Grizzly,
" писал(а):SubQ.Sum_pu
нет. Я бы
очень рекомендовал Вам ознакомиться с любым мануалом по SQL (Structured Query Language)... Особено с разделом "подзапросы" (они же "вложенные" запросы)...
Дело в том, что "AS SubQ" - as - означает "как" (или, если понятнее "именовать так") так именуется внутренный подзапрос, в котором выбираются два поля - Fio и Sum_purch (обратите внимания на ключевое слово AS) во внутреннем запросе записи группируются по фамилиям, и по каждой фамилии считается сумма из таблицы T2...
Дальше всё понятно?
Re: Запрос на обновление записи
Добавлено: 04 фев 2008, 08:57
Dr_Grizzly
Воо-ооо! Теперь ясненько! Спасибо!
Re: Запрос на обновление записи
Добавлено: 04 фев 2008, 09:35
Dr_Grizzly
Блин, то ли я туплю, то ли лыжи не едут, пишет: Ошибка синтаксиса (пропущен оператор) в выражении запроса 'SubQ.Sum_purch FROM
(SELECT t1.fio as Fio, sum(t2.sum) AS Sum_purch
FROM tab1 AS t1 JOIN tab2 AS t2 ON t1.key=t2.fiokey
GROUP BY t1.fio) AS SubQ'
Re: Запрос на обновление записи
Добавлено: 04 фев 2008, 10:50
Владимир
Я думаю, что дело в следующем: ты в названии полей таблицы используешь служебные слова sum, key. Заключи их в квадратные скобки(sum(t2.[sum] и t1.[key])) и все долджно быть ОК. На будущее, не называй поля именами пересекающимися со служебными словами.
Re: Запрос на обновление записи
Добавлено: 04 фев 2008, 13:20
Игорь Акопян
так, в порядке любопытства... Что за сервер то?
Re: Запрос на обновление записи
Добавлено: 04 фев 2008, 14:40
Dr_Grizzly
Гы

это в Дельфе компонент Adoquery, у него строю sql запрос
А ошибка не пропала, все так же ругается на тоже самое, только теперь рисует t1.[key]
Re: Запрос на обновление записи
Добавлено: 04 фев 2008, 16:13
Владимир
Игорь Акопян интересовался к какому серверу БД происходит обращение: MS SQL, Oracle, DB2, MySQL и т.п. Почти каждый сервер БД имеет свой диалект языка SQL. Я приводил примеры исходя из Transact-SQL(MS SQL).