Sql-Server
對每一行使用特定條件的 AVG
我有一張
Quotation
帶QuotationID, ClientID
欄位的桌子。一張
QuotationDetail
桌子,QuotationID, ProductID
一張桌子,一張
Sales
桌子Year, ProductID, ClientID and Quantity
。我正在嘗試使用以下列創建視圖:
QuotationID
|Client Name
|Product Name
|Quantity2015
|Quantity2016
我能夠將報價表與客戶和產品一起加入,但無法弄清楚如何按 YEAR(2015 年和 2016 年)過濾每個視圖行的 SUM Quantity 值。
PS:我沒有指定,但我有我提到的欄位的客戶和產品表。
你可以做這樣的事情。
Quantity2015 = SUM(CASE WHEN Year = 2015 THEN QuantityTotal ELSE 0 END) Quantity2016 = SUM(CASE WHEN Year = 2016 THEN QUantityTotal ELSE 0 END)
不是很靈活,但它確實有效。您也可以使用 SUM 以外的其他聚合器。
好的,所以一個完整的查詢範例看起來像這樣。您可能需要更正表名(尤其是對於客戶/產品)。
SELECT Q.QuotationId , C.ClientName , P.ProductName , Quantity2015 = SUM(CASE WHEN S.[Year] = 2015 THEN S.Quantity ELSE 0 END) , Quantity2016 = SUM(CASE WHEN S.[Year] = 2016 THEN S.Quantity ELSE 0 END) FROM Quotation AS Q INNER JOIN Client AS C ON C.ClientID = Q.ClientID INNER JOIN QuotationDetail AS QD ON QD.QuotationID = Q.QuotationID INNER JOIN Product AS P ON P.ProductID = QD.ProductID INNER JOIN Sales AS S ON S.ProductID = QD.ProductID AND S.ClientID = Q.ClientID GROUP BY Q.QuotationId , C.ClientName , P.ProductName