簡體   English   中英

SQL Server聚合函數的總和

[英]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顯然包含兩個邏輯上不同的信息:名稱本身以及該產品是否為升級產品。

最好將其分為兩個表,例如ProductsOrders Products表將具有列ProductID (主鍵), Product_NameIs_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM