Sql-Server

對每一行使用特定條件的 AVG

  • April 16, 2017

我有一張QuotationQuotationID, 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

引用自:https://dba.stackexchange.com/questions/169349