Помогите пожалуйста.
Есть данный запрос «Update Table_1 set Fx = (id/(MAX(id)+1))» , Где нужно высчитать столбец Fx, который равен id/»количество_строк_либо_максимальное_значение_id»+1) Помогите, как это сделать. Пишет данную ошибку Статистическое выражение нельзя использовать в списке SET инструкции UPDATE.
задан 13 апр 2020 в 15:40
Как-то так:
Update Table_1 set Fx = id/(select MAX(id)+1 from Table_1)
ответ дан 13 апр 2020 в 15:49
Sergey MoiseenkoSergey Moiseenko
1,0411 золотой знак7 серебряных знаков7 бронзовых знаков
2
Aumi 20 / 35 / 14 Регистрация: 08.10.2015 Сообщений: 406 |
||||
1 |
||||
Запрос на обновление20.03.2018, 15:05. Показов 5654. Ответов 3 Метки нет (Все метки)
Здравствуйте, Есть две таблицы tab1(id, price,….) В tab2 mydate-пустой столбец. Требуется его обновить. Проставить максимальный price из tab1 по данному id. В tab2 id не повторяются Пример данных в таблицах После обновления в tab2 будет мой запрос
Ошибка: Статистическое выражение нельзя использовать в списке SET инструкции UPDATE.
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
20.03.2018, 15:05 |
Ответы с готовыми решениями: Запрос на обновление Необходимо повысить на 20% стипендию студентам, у… Запрос на обновление Запрос на обновление данных Запрос на Обновление таблицы 3 |
Igr_ok 783 / 615 / 272 Регистрация: 04.08.2015 Сообщений: 1,707 |
||||
20.03.2018, 15:15 |
2 |
|||
Сообщение было отмечено Aumi как решение Решение
1 |
20 / 35 / 14 Регистрация: 08.10.2015 Сообщений: 406 |
|
20.03.2018, 15:42 [ТС] |
3 |
Igr_ok, говорит, что «Неправильный синтаксис около конструкции «t2″» Добавлено через 19 минут
0 |
3337 / 2041 / 728 Регистрация: 02.06.2013 Сообщений: 5,017 |
|
20.03.2018, 16:38 |
4 |
Ошибка: Статистическое выражение нельзя использовать в списке SET инструкции UPDATE. Потому что нужно писать не SELECT MAX(p.price) FROM tab1 WHERE id=p.id, а SELECT MAX(price) FROM tab1 WHERE id=p.id
0 |
MurCode
- Форумы
- Поиск
- О проекте
trak
Дата: 15.11.2010 11:32:34
Привет!
Я пишу код паралельно под MSSQL и Oracle и нарвался на такую проблему:
UPDATE MAPINFO_T50.GP_ENTITY_VIEW SET ПОЛЕВОЙ_ИД = (SELECT CASE WHEN MIN(mapinfo_t50.get_from_comments('OFFLINE_EVENT', MAPINFO_T50.GP_ENTITY_VIEW.ОБЪЕКТ_ИД, 'SERVICE_ID')) IS NULL THEN MIN(mapinfo_t50.get_from_comments('SITE', MAPINFO_T50.GP_ENTITY_VIEW.ОБЪЕКТ_ИД, 'SERVICE_ID')) ELSE MIN(mapinfo_t50.get_from_comments('OFFLINE_EVENT', MAPINFO_T50.GP_ENTITY_VIEW.ОБЪЕКТ_ИД, 'SERVICE_ID')) END );
На что мне сервер отвечает:
SQL Server Database Error: Статистическое выражение нельзя использовать в списке SET инструкции UPDATE
Соответственно, а как принято тогда писать-то собственно?
—
Гроб карманов не имеет.
Glory
Дата: 15.11.2010 11:34:39
Опишите задачу, а не ваш способ решения
trak
Дата: 15.11.2010 11:36:46
Glory,
Первое требование, код должен быть максимально одинаков между двумя БД, отсюда такое странный вид.
Нужно обновить поле ПОЛЕВОЙ_ИД значением одной из функции (тем, которое не пустое). Параметром функции является поле таблицы.
Как-то так
Glory
Дата: 15.11.2010 11:38:52
trak |
Glory,
Первое требование, код должен быть максимально одинаков между двумя БД, отсюда такое странный вид. Нужно обновить поле ПОЛЕВОЙ_ИД значением одной из функции (тем, которое не пустое). Параметром функции является поле таблицы. |
SELECT CASE WHEN MIN( — откуда агрегатная функция при отсутствии набора данных ?
Неужели в Oracle есть возможность агрегировать без набора данных ?
SomewhereSomehow
Дата: 15.11.2010 11:40:36
trak |
Первое требование, код должен быть максимально одинаков между двумя БД, отсюда такое странный вид. |
просто интересно стало, для расширения кругозора, а оракл позволяет такой синтаксис?
trak
Дата: 15.11.2010 11:41:36
SomewhereSomehow | ||
просто интересно стало, для расширения кругозора, а оракл позволяет такой синтаксис? |
Да, только там надо дописать FROM dual
В оракле нельзя делать селект «из ниоткуда».
Megabyte
Дата: 15.11.2010 11:41:46
trak |
Нужно обновить поле ПОЛЕВОЙ_ИД значением одной из функции (тем, которое не пустое). Параметром функции является поле таблицы. Как-то так |
Это поле реально на кириллице назвали?
trak
Дата: 15.11.2010 11:43:03
Glory | ||
SELECT CASE WHEN MIN( — откуда агрегатная функция при отсутствии набора данных ? |
Бро, хорошь прикалываться.
Напиши у себя в MSSQL
SELECT MIN(1)
Glory
Дата: 15.11.2010 11:43:13
trak | ||
Да, только там надо дописать FROM dual В оракле нельзя делать селект «из ниоткуда». |
SELECT CASE WHEN MIN(mapinfo_t50.get_from_comments('OFFLINE_EVENT', MAPINFO_T50.GP_ENTITY_VIEW.ОБЪЕКТ_ИД, 'SERVICE_ID')) IS NULL THEN MIN(mapinfo_t50.get_from_comments('SITE', MAPINFO_T50.GP_ENTITY_VIEW.ОБЪЕКТ_ИД, 'SERVICE_ID')) ELSE MIN(mapinfo_t50.get_from_comments('OFFLINE_EVENT', MAPINFO_T50.GP_ENTITY_VIEW.ОБЪЕКТ_ИД, 'SERVICE_ID')) END FROM DUAL
и из каких же данных в Оракле тут произойдет вычисление, если во FROM таблицы mapinfo_t50 ?
SomewhereSomehow
Дата: 15.11.2010 11:44:25
trak |
Да, только там надо дописать FROM dual В оракле нельзя делать селект «из ниоткуда». |
вы уж тогда полностью бы запрос привели, а не только часть,
п.с.
а то мне аж страшно стало что оракл настолько «другой»…=)
I’m trying to update the sum of one table contents to another table using this query.
update c set c.amountwithoutvat = SUM(c.amountwithvat / 1.25),
c.profitamount=(SUM(rp.amountwithtvat / 1.25) - (ps.netpurchaseprice*rp.qtysold)),
c.profitpercent= ((SUM(c.amountwithvat / 1.25) - (ps.netpurchaseprice*c.qtysold)) / SUM(c.amountwithvat / 1.25)) * 100
from data.cashierdailysales c inner join receipts r on c.salesdate=r.RecDate
inner join data.receipt_productlines rp on r.seriesno=rp.seriesno
inner join product_supplier ps on ps.productid=rp.productid
inner join product_chain pc on pc.productid=ps.productid and pc.activesupplier=ps.supplierid
where c.salesdate between CONVERT(date,'20-02-2014',104) and CONVERT(date,'03-03-2014',104)
But i get this error,
`an aggregate may not appear in the set list of an UPDATE statement.
And when i use group by at the end I get,
Incorrect syntax near the keyword 'group'
Как составить запрос?
UPDATE table
если sfield равен 1 то
SET field1=CONCAT('text', field1)
если нет, то
SET field2=CONCAT('text', field2)
where id=12
задан 27 окт 2014 в 0:09
Пишу по примеру с SO, может, поправить надо будет:
UPDATE table SET
field1 = CASE
WHEN sfield = 1 THEN CONCAT('text', field1)
ELSE field1
END,
field2 = CASE
WHEN sfield = 1 THEN field2
ELSE CONCAT('text', field2)
END
;
Виталина
111 золотой знак2 серебряных знака8 бронзовых знаков
ответ дан 27 окт 2014 в 0:49
etkietki
35.8k2 золотых знака54 серебряных знака78 бронзовых знаков