Страница 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,
&quot писал(а):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).