SQL установить столбец с производным значением - PullRequest
0 голосов
/ 03 января 2019

Как установить значение столбца на «1», где сумма (цена)> = 88

Например: если сумма (цена) для клиента A больше или равна 88, доставка будет обновляться как «Y»

таблица клиентов: имя, цена, доставка (я только перечислил важный столбец)

Мой SQL-запрос:

UPDATE  customer
SET delivery ='Y'
WHERE (SELECT SUM(price) FROM customer
GROUP BY name )>=88;

Ошибка: вы не можете указать целевую таблицу "customer" для обновления в предложении FROM

См. Прилагаемую таблицу:

enter image description here

Ответы [ 4 ]

0 голосов
/ 03 января 2019

У вас нет соединения между таблицей, которую вы обновляете, и вашей выборкой. Ваш стол на самом деле не имеет ключа, но с учетом того, что вы показали, я бы сделал это так:

update Orders
set delivery = 'Y'
where Name in (SELECT NAME FROM 
    (SELECT NAME, SUM(PRICE) TOTAL_PRICE
    FROM ORDERS 
    GROUP BY NAME
    HAVING SUM(PRICE)> 88) A
    ) 

Таким образом, в основном он получает имя каждого клиента и сумму или цену его заказа, но только там, где сумма превышает 88. Затем он просто извлекает имя из этого подвыбора и обновляет только те строки, где имя существует в списке. имен для заказов на сумму более 88.

0 голосов
/ 03 января 2019

Вы не говорите, какую базу данных вы используете (или какую версию), поэтому вы можете попробовать, если этот стандарт SQL работает на ней:

with
x as (
  select name
  from customer
  group by name
  having sum(price) > 88
)
update customer c
set delivery = 'Y'
where name in (select name from x)
0 голосов
/ 03 января 2019

По сути, то же самое @TheImpaler только что опубликовал, но с подзапросом вместо CTE.

Сначала получите имена, которые соответствуют требованиям, а затем присоединитесь к этому списку для оператора UPDATE.

UPDATE t
  SET delivery = 'Y'
FROM
  #t AS t
JOIN
  (
    SELECT
      name
     ,SUM(price) AS total
    FROM
      #t
    GROUP BY
      name
    HAVING
      SUM(price) >= 88
  ) AS d
    ON
    d.name = t.name;

Вот рабочий Rextester: https://rextester.com/LQWE88535

0 голосов
/ 03 января 2019

Установите для столбца значение, выбранное вами из таблицы, и не группируйте их.
SET COLUMN_X = (SELECT SUM(price) FROM customer)

Теперь вы используете свой запрос, и он выглядит чище

UPDATE  customer
SET delivery ='Y'
WHERE COLUMN_X = >=88;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...