SQL Server聚合函数与sum

时间:2015-02-18 18:04:59

标签: sql-server function aggregate

我想在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中可以做些什么吗? 如果不让我知道的话,我希望我很清楚。

提前致谢。

3 个答案:

答案 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 NameProductsOrders表格包含Products列(主键),ProductIDProduct_NameIs_Upgrade表格包含列Orders( (主键),OrderID(外键)和CustomerID

鉴于您现在所拥有的,并且假设您想要避免计算产品名称以“升级”结尾的席位,您似乎想要查询这些内容:

ProductID
相关问题