Статистическое выражение нельзя использовать в списке set инструкции update

Помогите пожалуйста.
Есть данный запрос «Update Table_1 set Fx = (id/(MAX(id)+1))» , Где нужно высчитать столбец Fx, который равен id/»количество_строк_либо_максимальное_значение_id»+1) Помогите, как это сделать. Пишет данную ошибку Статистическое выражение нельзя использовать в списке SET инструкции UPDATE.

задан 13 апр 2020 в 15:40

Andrey's user avatar

Как-то так:

Update Table_1 set Fx = id/(select MAX(id)+1 from Table_1)

ответ дан 13 апр 2020 в 15:49

Sergey Moiseenko's user avatar

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(id, price,….)

В tab2 mydate-пустой столбец. Требуется его обновить. Проставить максимальный price из tab1 по данному id. В tab2 id не повторяются

Пример данных в таблицах
tab1
id price
1 5
1 10
2 3
3 8
3 4

После обновления в tab2 будет
id price
1 10
2 3
3 8

мой запрос

SQL
1
2
3
  UPDATE tab2
  SET price=(SELECT MAX(p.price) FROM tab1 WHERE id=p.id)
 FROM tab2 INNER JOIN tab1 p ON id=p.id

Ошибка: Статистическое выражение нельзя использовать в списке SET инструкции UPDATE.



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

20.03.2018, 15:05

Ответы с готовыми решениями:

Запрос на обновление
Всем доброго времени суток.
Есть модель:

Необходимо повысить на 20% стипендию студентам, у…

Запрос на обновление
Есть 2 таблицы. 1 содержит фамилию арбитра и рейтинг, а вторая Раунд матча. Как сделать так чтобы…

Запрос на обновление данных
Здравствуйте. Есть простая таблица:
id (int)
Country (Text)
City (Text)
Street (Text)
Name…

Запрос на Обновление таблицы
Ребята подскажите, как лучше написать запрос. Есть таблица, в ней допустим 100 записей номеров…

3

Igr_ok

783 / 615 / 272

Регистрация: 04.08.2015

Сообщений: 1,707

20.03.2018, 15:15

2

Лучший ответ Сообщение было отмечено Aumi как решение

Решение

SQL
1
2
3
UPDATE tab2
SET price=t2.price FROM tab1 t1 INNER JOIN(
SELECT MAX(price) AS price, id FROM tab2 GROUP BY id) t2 ON t1.id=t2.id



1



20 / 35 / 14

Регистрация: 08.10.2015

Сообщений: 406

20.03.2018, 15:42

 [ТС]

3

Igr_ok, говорит, что «Неправильный синтаксис около конструкции «t2″»

Добавлено через 19 минут
поменяла SET price=t2.price на SET price=Nprice. И в внутреннем запросе AS Nprice



0



3337 / 2041 / 728

Регистрация: 02.06.2013

Сообщений: 5,017

20.03.2018, 16:38

4

Цитата
Сообщение от Aumi
Посмотреть сообщение

Ошибка: Статистическое выражение нельзя использовать в списке SET инструкции UPDATE.

Потому что нужно писать не SELECT MAX(p.price) FROM tab1 WHERE id=p.id, а SELECT MAX(price) FROM tab1 WHERE id=p.id



0



Logo
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
trak
Первое требование, код должен быть максимально одинаков между двумя БД, отсюда такое странный вид.

просто интересно стало, для расширения кругозора, а оракл позволяет такой синтаксис?

Да, только там надо дописать FROM dual

В оракле нельзя делать селект «из ниоткуда».

Megabyte

Дата: 15.11.2010 11:41:46

trak
Нужно обновить поле ПОЛЕВОЙ_ИД значением одной из функции (тем, которое не пустое). Параметром функции является поле таблицы.
Как-то так :)

Это поле реально на кириллице назвали?

trak

Дата: 15.11.2010 11:43:03

Glory
trak
Glory,

Первое требование, код должен быть максимально одинаков между двумя БД, отсюда такое странный вид.

Нужно обновить поле ПОЛЕВОЙ_ИД значением одной из функции (тем, которое не пустое). Параметром функции является поле таблицы.
Как-то так :)

SELECT CASE WHEN MIN( — откуда агрегатная функция при отсутствии набора данных ?
Неужели в Oracle есть возможность агрегировать без набора данных ?

Бро, хорошь прикалываться.
Напиши у себя в MSSQL

SELECT MIN(1)

Glory

Дата: 15.11.2010 11:43:13

trak
SomewhereSomehow
пропущено…

просто интересно стало, для расширения кругозора, а оракл позволяет такой синтаксис?

Да, только там надо дописать 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

user avatar

задан 27 окт 2014 в 0:09

user avatar

Пишу по примеру с 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
;

user avatar

Виталина

111 золотой знак2 серебряных знака8 бронзовых знаков

ответ дан 27 окт 2014 в 0:49

user avatar

etkietki

35.8k2 золотых знака54 серебряных знака78 бронзовых знаков

Всё ещё ищете ответ? Посмотрите другие вопросы с метками sql mysql или задайте свой вопрос.

Понравилась статья? Поделить с друзьями:
  • Статистическая форма 12 вэс услуги инструкция по заполнению
  • Статистическая форма 11 сделка инструкция по заполнению
  • Статистика форма 11 краткая инструкция по заполнению 2022 год
  • Статистика 12 ф расчеты инструкция по заполнению
  • Статины розувастатин инструкция по применению отзывы