SQL 总和的服务器聚合函数

SQL Server aggregate function with sum

我想在SQL服务器中使用聚合函数来计算座位数:

table就是这样(都是一样的软件只是版本变了)

 OrderID |  CustomerID | ProductID  | Product Name       |    No of Seats

    1       |  11         | 351-0212-4 | soft v601,Download  |  3
    2       |  11         | 361-0313-5 | soft v701,Upgrade   |  2
    3       |  12         | 341-1210-4 | soft v501,Download  |  5
    4       |  12         | 351-0212-5 | soft v601,Upgrade   |  2
    ...

我想要

这样的结果
 Sum(no of seats) 
   8

因此,如果客户已经购买了软件但已经升级,请为客户保留席位。

例如:

客户 11 购买了我们软件的 3 个许可证,然后他购买了两个更新版本的升级版,因此他的总和应该是 3 个而不是 5 个。

在 SQL 中可以做些什么吗? 如果不让我知道,我希望我已经清楚了。

提前致谢。

类似

select CustomerID, sum([No of Seats])
from <your table>
where [Product Name] not like '%upgrade%'
group by CustomerID

但总的来说 - 过滤掉您不想在结果中看到的那些,然后求和。如果你想要总数(不是每个客户):

select sum([No of Seats])
from <your table>
where [Product Name] not like '%upgrade%'

你应该添加布尔列,比如'isActive',然后你的select可以像这样

select customerid, sum(numberOfSeats) from table
where isActive = 1 
group by customerid

您有一些规范化问题。 Product Name 列(大概)与 ProductID 列是冗余的,plus Product Name 显然带有两条逻辑上截然不同的信息:名称本身,以及该产品是否是升级版。

最好把它分成两个 table,比如 ProductsOrdersProducts table 将包含列 ProductID(主键)、Product_NameIs_Upgrade,而 Orders table 将有列 OrderID(主键)、CustomerID(外键)、ProductID(外键)和 NumberOfSeats.

然而,鉴于您现在拥有的,并且假设您希望避免计算产品名称以 'Upgrade' 结尾的席位,您似乎需要按照以下行进行查询:

SELECT SUM("No of seats")
FROM Orders
WHERE CustomerID = 11 AND "Product Name" NOT LIKE '%Upgrade'