Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 数据库冒险工程_Sql_Sql Server - Fatal编程技术网

Sql 数据库冒险工程

Sql 数据库冒险工程,sql,sql-server,Sql,Sql Server,我正在尝试在AdventureWorks中构建以下查询: 我们每年销售的哪些部分(销售价值)与个人客户有关,哪些部分用于商店?结果列应如下所示,并应按年份排序: Year, Percents of sale to Individuals, Percents of sale to stores, Total value of sale 知道怎么做吗 这是我迄今为止为个人所做的,我不确定这是否正确 SELECT c.CustomerType, YEAR(oh.OrderDate)

我正在尝试在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

我不知道您使用的是哪个版本的
AdventureWorks
——我在我的(SQL Server 2012版本)中找不到
CustomerType
列。在我的案例中,客户的类型在
Person.Person
表中定义

我将采取以下措施来解决此问题:

  • 创建一个CTE(通用表表达式)以汇总个人销售额,并按年份分组
  • 创建第二个CTE,按年度分组,汇总对公司客户的销售额
一旦有了这两组数据,就很难确定每年的总销售额(这只是两个CTE加在一起的值),也很难确定个人和公司客户的销售额百分比

这是我的代码-适用于
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
这给了我一个输出:


向我们展示您的尝试!你被困在哪里??我们不仅仅是要为您编写整个代码……@marc_s:我也添加了我的代码并重新格式化:)个人和存储的百分比应该分别是多少?这就是我要尝试的,所以我把问题放在这里来找出这个!!我使用的是2008版,但非常感谢您的代码帮助很大:)