2017-05-21 150 views
0

我創建了SalesMonth函數,該函數接收月份編號和年份編號作爲參數,並顯示月份和年份中銷售的產品的總計列表作爲參數傳遞。該清單顯示以下產品信息:標識符,月份,年份,總售出數量,平均單價,總折扣和總銷售額。將本月的銷售額與上個月進行比較 - 功能 - T-SQL

按照下面的代碼:

CREATE FUNCTION SalesMonth (@month int, @year int) 
RETURNS TABLE 
AS 
RETURN (
    SELECT 
     AdventureWorks.Sales.SalesOrderDetail.ProductID, 
     MONTH(AdventureWorks.Sales.SalesOrderHeader.OrderDate) as 'Mes', 
     YEAR(AdventureWorks.Sales.SalesOrderHeader.OrderDate) as 'Ano', 
     SUM(AdventureWorks.Sales.SalesOrderDetail.OrderQty) as 'Quantidade Total Vendida', 
     AVG(AdventureWorks.Sales.SalesOrderDetail.UnitPrice) as 'Preco Unitario Médio', 
     SUM(AdventureWorks.Sales.SalesOrderDetail.UnitPriceDiscount) as 'Desconto Total', 
     SUM(AdventureWorks.Sales.SalesOrderDetail.LineTotal) as 'Valor Total Vendido' 
    FROM 
     AdventureWorks.Sales.SalesOrderDetail 
    INNER JOIN 
     AdventureWorks.Sales.SalesOrderHeader 
    ON 
     AdventureWorks.Sales.SalesOrderHeader.SalesOrderID = AdventureWorks.Sales.SalesOrderDetail.SalesOrderID 
    WHERE 
     MONTH(AdventureWorks.Sales.SalesOrderHeader.OrderDate) = @month 
      AND 
     YEAR(AdventureWorks.Sales.SalesOrderHeader.OrderDate) = @year 
    GROUP BY 
      AdventureWorks.Sales.SalesOrderDetail.ProductID, 
      MONTH(AdventureWorks.Sales.SalesOrderHeader.OrderDate), 
      YEAR(AdventureWorks.Sales.SalesOrderHeader.OrderDate) 
) 

現在我需要比較哪些項目必須比前一個月的銷售額增長。我想過做這樣的事情:

SELECT * 
FROM SalesMonth(10, 2001) 
WHERE SumPrice > (SELECT SumPrice FROM SalesMonth(9, 2001)) 

我知道這是一個嚴重的錯誤,但我想不出任何這樣的事情。有沒有人有類似的問題這個問題的想法?

+0

有什麼錯呢? – McNets

+0

SQL錯誤[512] [S0001]:子查詢返回多個值。當子查詢遵循=,!=,<, <= , >,> =或當子查詢用作表達式時,這是不允許的。 – mdcg

回答

0

加入上月9

SELECT * 
FROM SalesMonth(10, 2001) M10 
INNER JOIN SalesMonth(9, 2001) M9 
ON M10.ProductId = M9.ProductID 
WHERE M10.SumPrice > M9.SumPrice; 
+0

這正是我所需要的。非常感謝你。 – mdcg

+0

我很樂意提供幫助。 – McNets

0

與銷售銷售月10的你可以嘗試訪問由加盟如下:

SELECT a.*, b.*, Case When a.[Desconto Total] >= b.[Desconto Total] then 'Greater than or equal to previous Month' else 'Less than previous month' End as [Comparison] 
FROM SalesMonth(10, 2001) a 
left join SalesMonth(9,2001) b 
on a.ProductId = b.ProductId 
+0

解決方案很好,但我只想詢問與前一個月相比有所增加的銷售。它不必如此詳細。 – mdcg

+0

但無論如何,謝謝。 – mdcg

相關問題