Запрос на обновление записи
-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Всем привет! Такая вот ситуация, есть две таблицы:
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. Такое можно реализовать или я брежу уже? ))))
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

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

-
- Сообщения: 375
- Зарегистрирован: 31 авг 2007, 03:06
возьму на себя наглость ответить..
Dr_Grizzly,
Дело в том, что "AS SubQ" - as - означает "как" (или, если понятнее "именовать так") так именуется внутренный подзапрос, в котором выбираются два поля - Fio и Sum_purch (обратите внимания на ключевое слово AS) во внутреннем запросе записи группируются по фамилиям, и по каждой фамилии считается сумма из таблицы T2...
Дальше всё понятно?
Dr_Grizzly,
нет. Я бы очень рекомендовал Вам ознакомиться с любым мануалом по SQL (Structured Query Language)... Особено с разделом "подзапросы" (они же "вложенные" запросы)..." писал(а):SubQ.Sum_pu
Дело в том, что "AS SubQ" - as - означает "как" (или, если понятнее "именовать так") так именуется внутренный подзапрос, в котором выбираются два поля - Fio и Sum_purch (обратите внимания на ключевое слово AS) во внутреннем запросе записи группируются по фамилиям, и по каждой фамилии считается сумма из таблицы T2...
Дальше всё понятно?
-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Воо-ооо! Теперь ясненько! Спасибо!
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Блин, то ли я туплю, то ли лыжи не едут, пишет: Ошибка синтаксиса (пропущен оператор) в выражении запроса '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'
(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

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

-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Гы
это в Дельфе компонент Adoquery, у него строю sql запрос
А ошибка не пропала, все так же ругается на тоже самое, только теперь рисует t1.[key]


А ошибка не пропала, все так же ругается на тоже самое, только теперь рисует t1.[key]
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

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