Sql 数据库冒险工程
我正在尝试在AdventureWorks中构建以下查询: 我们每年销售的哪些部分(销售价值)与个人客户有关,哪些部分用于商店?结果列应如下所示,并应按年份排序: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)
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,按年度分组,汇总对公司客户的销售额
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版,但非常感谢您的代码帮助很大:)