首页 > 解决方案 > 子查询返回超过 1 个值。当子查询跟随 !=、<、<=、>、>= 时,这是不允许的

问题描述

我正在尝试更新一个字段,以便销售额高于 0 的客户的 CustomerLevel 处于“1 级”,但这对我不起作用:

UPDATE Customers 
    SET CustomerLevel = 'Level 1' 
WHERE (
       (SELECT SUM(Sales.Subtotal)
        FROM Sales 
        JOIN Customers
        ON Customers.CustomerID = Sales.CustomerID
        GROUP BY Customers.CustomerID
       )
>=0) 

标签: sql-server

解决方案


有几种方法可以做到这一点。推测,但这可能会有最好的执行计划,但检查一下。

UPDATE Customers 
    SET CustomerLevel = 'Level 1' 
FROM Customers AS c1
INNER JOIN
       (SELECT 
            SUM(Sales.Subtotal) AS sum2, 
            s2.CustomerID AS CustomerID2
        FROM Sales AS s2
        GROUP BY s2.CustomerID
       ) AS t2
ON t2.CustomerID = c1.CustomerID 
   AND t2.sum2 >=0

推荐阅读