Как я могу использовать 2 раза одну и ту же таблицу из запроса SELECT для обновления столбца в SQL? - PullRequest
0 голосов
/ 06 июля 2018

Ситуация здесь такова, что у меня есть очень сложный запрос, который генерирует мне таблицу, содержащую всего 2 столбца, один столбец - это столбец общей суммы продуктов, проданных определенным сотрудником, а другой столбец - идентификатор сотрудника, я пытаюсь использовать эту таблицу для обновления столбца N_products сотрудников (количество проданных продуктов). Уже работающий запрос:

SELECT 
    SUM(QUANTITY) AS productosven, 
    EmployeeID 
FROM 
    (SELECT 
         Orders.OrderID, Orders.EmployeeID, [Order Details].Quantity 
     FROM 
         Orders  
     INNER JOIN 
         DimEmployee ON Orders.EmployeeID = DimEmployee.EmployeeID 
     INNER JOIN 
         [Order Details] ON [Order Details].OrderID = Orders.OrderID)
     GROUP BY 
         EmployeeId) x

Таблица, которую он генерирует:

enter image description here

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

UPDATE DimEmployee 
SET N_Products = (SELECT SUM(QUANTITY) AS productosven 
                  FROM
                      (SELECT 
                           Orders.OrderID, Orders.EmployeeID, [Order Details].Quantity 
                       FROM 
                           Orders  
                       INNER JOIN 
                           DimEmployee ON Orders.EmployeeID = DimEmployee.EmployeeID 
                       INNER JOIN 
                           [Order Details] ON [Order Details].OrderID = Orders.OrderID) AS X
                  GROUP BY EmployeeId)
WHERE 
    EmployeeID = (SELECT EmployeeID 
                  FROM
                      (SELECT 
                           Orders.OrderID, Orders.EmployeeID, [Order Details].Quantity 
                       FROM 
                           Orders  
                       INNER JOIN 
                           DimEmployee ON Orders.EmployeeID = DimEmployee.EmployeeID 
                       INNER JOIN 
                           [Order Details] ON [Order Details].OrderID = Orders.OrderID) AS X 
                  GROUP BY EmployeeId)

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

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

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Вы можете использовать JOIN в 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 голосов
/ 06 июля 2018

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

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
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...