我想在SQL Server中使用聚合函数来总计席位数:
该表就像那样(它只是版本更改所有相同的软件)
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
因此,如果客户已购买该软件但已升级,则保留客户的座位数。
e.g:
客户11购买了我们软件的3个许可证,然后他购买了两个新版本的升级版本,因此他的金额应为3而不是5。
在SQL中可以做些什么吗? 如果不让我知道的话,我希望我很清楚。
提前致谢。
答案 0 :(得分:1)
类似
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%'
答案 1 :(得分:0)
您应该添加布尔列,例如&#39; isActive&#39;,然后您的选择可以像这样
select customerid, sum(numberOfSeats) from table
where isActive = 1
group by customerid
答案 2 :(得分:0)
您有一些规范化问题。对于Product Name
列,<{1}}列可能是多余的,{em>加 ProductID
显然有两个逻辑上不同的信息:名称本身,以及该产品是否是升级。
最好将其拆分为两个表,比如Product Name
和Products
。 Orders
表格包含Products
列(主键),ProductID
和Product_Name
,Is_Upgrade
表格包含列Orders
( (主键),OrderID
(外键)和CustomerID
。
鉴于您现在所拥有的,并且假设您想要避免计算产品名称以“升级”结尾的席位,您似乎想要查询这些内容:
ProductID