[英]SQL Server aggregate function with sum
我想在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
因此,如果客戶已經購買了軟件但已升級,請為客戶保留席位。
例如:
客戶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 customerid, sum(numberOfSeats) from table
where isActive = 1
group by customerid
您有一些規范化問題。 Product Name
列與ProductID
列(大概)是多余的, 再加上 Product Name
顯然包含兩個邏輯上不同的信息:名稱本身以及該產品是否為升級產品。
最好將其分為兩個表,例如Products
和Orders
。 Products
表將具有列ProductID
(主鍵), Product_Name
和Is_Upgrade
,而Orders
表將具有列OrderID
(主鍵), CustomerID
(外鍵), ProductID
(外鍵)和NumberOfSeats
。
但是,考慮到您現在擁有的東西,並假設您希望避免計算產品名稱以“ Upgrade”結尾的席位,您似乎希望查詢以下幾行:
SELECT SUM("No of seats")
FROM Orders
WHERE CustomerID = 11 AND "Product Name" NOT LIKE '%Upgrade'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.