Как я могу использовать 2 раза одну и ту же таблицу из запроса SELECT для обновления столбца в SQL?

Ситуация здесь заключается в том, что у меня очень сложный запрос, который генерирует мне таблицу с двумя столбцами, один столбец - это столбец из общей суммы продуктов, проданных определенным сотрудником, а другой столбец - это идентификатор сотрудника, что я пытаюсь сделать это, чтобы использовать эту таблицу для SELECT SUM ( QUANTITY ) AS productosven , EmployeeID FROM ( SELECT Orders . OrderID , Orders . EmployeeID , [ Order Details ]. Количество от заказов INNER JOIN DimEmployee ON Орденов . EmployeeID = DimEmployee . EmployeeID INNER JOIN [ Детали заказа ] ON [ Детали заказа ]. OrderID = Заказы . КодЗаказ ) ГРУППА ПО EmployeeID ) х UPDATE DimEmployee SET N_Products = ( ВЫБОР SUM ( КОЛИЧЕСТВО ) КАК productosven ОТ ( ВЫБРАТЬ заказы . OrderID , заказы . EmployeeID , [ Заказ Деталь ]. Количество ОТ Заказы ВНУТРЕННИХ РЕГИСТРИРУЙТЕСЬ DimEmployee ПО Заказам . КодСотрудник = DimEmployee . КодСотрудника ВНУТРЕННЯЯ РЕГИСТРИРУЙТЕСЬ [ Заказ Деталь ] ВКЛ [ Order Подробность ]. OrderID = Заказы . КодЗаказ ) AS X GROUP BY EmployeeID ) ГДЕ КодСотрудник = ( ВЫБОР EmployeeID ОТ ( ВЫБРАТЬ заказы . OrderID , заказы . EmployeeID , [ Заказ Деталь ]. Количество ОТ Заказы ВНУТРЕННИХ РЕГИСТРИРУЙТЕСЬ DimEmployee пО Заказам . КодСотрудник = DimEmployee . КодСотрудника ВНУТРЕННИЙ РЕГИСТРИРУЙТЕСЬ [ Order Деталь ] ВКЛ [ Order Подробность ]. КодЗаказ = Заказы . КодЗаказ ) AS X GROUP BY EmployeeID ) колонка сотрудников (количество проданных изделий). Уже выполненный запрос:

SELECT

Созданная таблица:

введите описание изображения здесь

Запрос, который я пытаюсь реализовать:

N_products

В основном, я пытаюсь использовать свой JOINзапрос дважды, первый раз - получить продукты и сохранить их N_products, а второй раз сравнить его с идентификатором из того же запроса, но SQL Server генерирует ошибку:

Мужской. 512, уровень 16, состояние 1, строка 1
Подзапрос возвращает более одного значения, что неверно, когда оно идет после = ,! =, <, <=,>,> = Или когда оно используется как выражение.

sql,sql-server-2008,

0

Ответов: 2


1 принят

Вы можете использовать UPDATEв UPDATE. Поэтому я мог бы порекомендовать:

UPDATE e
    SET n_products = sum_quantity
FROM DimEmployee e JOIN
     (SELECT o.EmployeeID, SUM(Quantity) as sum_quantity
      FROM Orders o JOIN
           [Order Details] od
           ON od.OrderID = o.OrderID
      GROUP BY o.EmployeeID
     ) o
     ON o.EmployeeID = e.EmployeeID;

Обратите внимание, что это не обновляет поле, если для сотрудника нет заказов (что, по-видимому, является целью вашего запроса). Если вы хотите обновить даже в этом случае, вы можете использовать LEFT JOIN.


0

Как насчет этого?

UPDATE DimEmployee
SET N_Products = (
    SELECT sum(od.Quantity) 
    FROM Orders o INNER JOIN [Order Details] od ON od.OrderID = Orders.OrderID
    WHERE o.EmployeeID = DimEmployee.EmployeeID
);
SQL, SQL-сервер 2008,
Похожие вопросы