Запрос на обновление записи

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

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

Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

29 янв 2008, 13:09

Всем привет! Такая вот ситуация, есть две таблицы:
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. Такое можно реализовать или я брежу уже? ))))
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Владимир
Сообщения: 56
Зарегистрирован: 25 апр 2005, 13:57

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
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

31 янв 2008, 19:12

SubQ.Sum_purch - а это что за табличка? она временная? или это там результат будет?
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Serge_Bliznykov
Сообщения: 366
Зарегистрирован: 31 авг 2007, 03:06

31 янв 2008, 21:55

возьму на себя наглость ответить..

Dr_Grizzly,
&quot писал(а):SubQ.Sum_pu
нет. Я бы очень рекомендовал Вам ознакомиться с любым мануалом по SQL (Structured Query Language)... Особено с разделом "подзапросы" (они же "вложенные" запросы)...
Дело в том, что "AS SubQ" - as - означает "как" (или, если понятнее "именовать так") так именуется внутренный подзапрос, в котором выбираются два поля - Fio и Sum_purch (обратите внимания на ключевое слово AS) во внутреннем запросе записи группируются по фамилиям, и по каждой фамилии считается сумма из таблицы T2...
Дальше всё понятно?
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

04 фев 2008, 08:57

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

04 фев 2008, 09:35

Блин, то ли я туплю, то ли лыжи не едут, пишет: Ошибка синтаксиса (пропущен оператор) в выражении запроса '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'
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Владимир
Сообщения: 56
Зарегистрирован: 25 апр 2005, 13:57

04 фев 2008, 10:50

Я думаю, что дело в следующем: ты в названии полей таблицы используешь служебные слова sum, key. Заключи их в квадратные скобки(sum(t2.[sum] и t1.[key])) и все долджно быть ОК. На будущее, не называй поля именами пересекающимися со служебными словами.
Аватара пользователя
Игорь Акопян
Сообщения: 1419
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

04 фев 2008, 13:20

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

04 фев 2008, 14:40

Гы :) это в Дельфе компонент Adoquery, у него строю sql запрос :)

А ошибка не пропала, все так же ругается на тоже самое, только теперь рисует t1.[key]
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Владимир
Сообщения: 56
Зарегистрирован: 25 апр 2005, 13:57

04 фев 2008, 16:13

Игорь Акопян интересовался к какому серверу БД происходит обращение: MS SQL, Oracle, DB2, MySQL и т.п. Почти каждый сервер БД имеет свой диалект языка SQL. Я приводил примеры исходя из Transact-SQL(MS SQL).
Ответить