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,比如 Products
和 Orders
。 Products
table 将包含列 ProductID
(主键)、Product_Name
和 Is_Upgrade
,而 Orders
table 将有列 OrderID
(主键)、CustomerID
(外键)、ProductID
(外键)和 NumberOfSeats
.
然而,鉴于您现在拥有的,并且假设您希望避免计算产品名称以 'Upgrade' 结尾的席位,您似乎需要按照以下行进行查询:
SELECT SUM("No of seats")
FROM Orders
WHERE CustomerID = 11 AND "Product Name" NOT LIKE '%Upgrade'
我想在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,比如 Products
和 Orders
。 Products
table 将包含列 ProductID
(主键)、Product_Name
和 Is_Upgrade
,而 Orders
table 将有列 OrderID
(主键)、CustomerID
(外键)、ProductID
(外键)和 NumberOfSeats
.
然而,鉴于您现在拥有的,并且假设您希望避免计算产品名称以 'Upgrade' 结尾的席位,您似乎需要按照以下行进行查询:
SELECT SUM("No of seats")
FROM Orders
WHERE CustomerID = 11 AND "Product Name" NOT LIKE '%Upgrade'