2013-11-02 52 views
-1

我想建立以下查詢AdventureWorks中:數據庫的AdventureWorks

它也適用於商場什麼我們的銷售部每年(銷售值)都涉及到個人客戶,哪些部分?結果列應如下,並應按年份排序:

Year, Percents of sale to Individuals, Percents of sale to stores, Total value of sale 

任何想法如何?

這是我迄今爲止爲個人所做的,我不確定它是否正確。

SELECT 
    c.CustomerType, 
    YEAR(oh.OrderDate) AS 'Year', 
    SUM(od.LineTotal) AS 'Sale in year' 

    FROM Sales.SalesOrderDetail od 
    INNER JOIN Sales.SalesOrderHeader oh ON od.SalesOrderID = oh.SalesOrderID 
    INNER JOIN Sales.Customer c ON oh.CustomerID = c.CustomerID 

    GROUP BY 
    YEAR(oh.OrderDate), 
    c.CustomerType 

    ORDER BY YEAR(oh.OrderDate) ASC 

This is the output. I just don't know how to reach that
Year, Percents of sale to Individuals, Percents of sale to stores, Total value of sale

+3

**風采**你已經盡力了!你卡在哪裏?我們不只是要爲你編寫整個代碼...... –

+0

@marc_s:我已經添加了我的代碼並再次格式化:) – user2947269

+0

百分比應該分別給個人和商店分別多少? – Edper

回答

2

我不知道是哪的AdventureWorks版本你 - 我不能在我的尋找CustomerType列(SQL Server 2012的版本)。在我的案例中,客戶的類型在Person.Person表中定義。

我會做些什麼來解決這個問題如下:

  • 創建一個CTE(公共表表達式)來總結銷售給個人,由今年
  • 分組創建第二個CTE總結達銷售給企業客戶,通過一年

分組。一旦你有這兩組數據,它變得相當瑣碎,確定每年的銷售總額(這還只是從兩個CTE的共同價值),並確定銷售給個人的百分比d企業客戶。

這是我的代碼 - 適用於AdventureWorks2012數據庫。

-- sales data for individuals, grouped by year 
;WITH IndivSalesData AS 
(
    SELECT 
     SaleYear = YEAR(oh.OrderDate), 
     SalesForYear = SUM(od.LineTotal) 
    FROM 
     Sales.SalesOrderDetail od 
    INNER JOIN 
     Sales.SalesOrderHeader oh ON od.SalesOrderID = oh.SalesOrderID 
    INNER JOIN 
     Sales.Customer c ON oh.CustomerID = c.CustomerID 
    INNER JOIN 
     Person.Person p ON c.PersonID = p.BusinessEntityID 
    WHERE 
     p.PersonType = 'IN' 
    GROUP BY 
     YEAR(oh.OrderDate) 
), 
-- sales data for corporate customers, grouped by year 
CorporateSalesData AS 
(
    SELECT 
     SaleYear = YEAR(oh.OrderDate), 
     SalesForYear = SUM(od.LineTotal) 
    FROM 
     Sales.SalesOrderDetail od 
    INNER JOIN 
     Sales.SalesOrderHeader oh ON od.SalesOrderID = oh.SalesOrderID 
    INNER JOIN 
     Sales.Customer c ON oh.CustomerID = c.CustomerID 
    INNER JOIN 
     Person.Person p ON c.PersonID = p.BusinessEntityID 
    WHERE 
     p.PersonType = 'SC' 
    GROUP BY 
     YEAR(oh.OrderDate) 
) 
-- select the Year, determine total sales, and percentages 
SELECT 
    Indiv.SaleYear, 
    PercentToIndividuals = Indiv.SalesForYear/(Indiv.SalesForYear + SC.SalesForYear) * 100.0, 
    PercentToCorporate = SC.SalesForYear/(Indiv.SalesForYear + SC.SalesForYear) * 100.0, 
    TotalSales = Indiv.SalesForYear + SC.SalesForYear 
FROM 
    IndivSalesData Indiv 
INNER JOIN 
    CorporateSalesData SC ON Indiv.SaleYear = SC.SaleYear 
ORDER BY 
    Indiv.SaleYear 

這讓我的輸出:

enter image description here

+0

我使用2008版本,但非常感謝你的代碼幫助了很多:) – user2947269

相關問題