Sql server SQL Server-窗口函数
所以,我需要一些家庭作业方面的帮助 下面是我需要使用的数据库部分的模式。 我确信其中有一些冗余(我也将感谢您对设置的任何帮助)。无论如何,这是作业:Sql server SQL Server-窗口函数,sql-server,window-functions,Sql Server,Window Functions,所以,我需要一些家庭作业方面的帮助 下面是我需要使用的数据库部分的模式。 我确信其中有一些冗余(我也将感谢您对设置的任何帮助)。无论如何,这是作业: 销售经理现在希望您创建一个报告,根据其产品的总销售额和总销售额(每个)对其产品进行排名 将是它自己的专栏)。创建一个返回 以下列,但也添加了两个新列 产品名称|订单数|总销售额|总销售数量 首席执行官想知道上个月的销售额。请向她提供一个查询,以便根据客户数量对产品进行排名 上个月的订单。不应该有跳过的数字 创建SELECT语句,该语句生成具有客
- 销售经理现在希望您创建一个报告,根据其产品的总销售额和总销售额(每个)对其产品进行排名
将是它自己的专栏)。创建一个返回
以下列,但也添加了两个新列 产品名称|订单数|总销售额|总销售数量 - 首席执行官想知道上个月的销售额。请向她提供一个查询,以便根据客户数量对产品进行排名 上个月的订单。不应该有跳过的数字
- 创建SELECT语句,该语句生成具有客户id、订单日期等的订单列表。***使用row number函数 为按订单日期描述排序的每一行生成唯一id
我认为购物车包含订单。订单包含OrderItems。OrderItem具有ProductId。因此,一车多订单。一个订单对应多个订单项。一个订单项对应一个产品。我看不出将购物车链接到订购物品或产品有任何价值。这是你的功课,你想让其他人帮你做吗?到目前为止你做了什么?是你提供了这个数据库还是你创建了它?我问这个问题是因为那个数据库有很多问题。肖恩,是我创建的。我很确定它出了问题。你看到了什么问题?我能做些什么使它更好?
CREATE PROCEDURE report_salesmanager
AS
WITH cte_main AS
(
SELECT p.NAME,
Isnull(Count(DISTINCT o.orderid), 0) corderid,
Sum(Isnull(o.ordertotal, 0)) sordertotal,
Sum (Isnull(oi.orderitemquantity, 0)) sorderitemquantity
FROM product p
LEFT JOIN orderitem oi
INNER JOIN orders o
ON o.orderid - oi.orderid
ON p.productid = oi.productid
GROUP BY p.NAME), cte_rank_value AS
(
SELECT NAME,
Rank() OVER( ORDER BY sordertotal DESC) rk
FROM cte_main), cte_rank_qtd AS
(
SELECT NAME,
Rank() OVER( ORDER BY sorderitemquantity DESC) rk
FROM cte_main)
SELECT a.NAME [Product Name],
a.corderid,
[Orders Count] a.sordertotal [Total Sales Value],
b.rk [Rank Total Sales Value],
a.sorderitemquantity [Total Sales Quantity],
c.rk [Rank Total Sales Quantity]
FROM cte_main a
INNER JOIN cte_rank_value b
ON a.NAME = b.NAME
INNER JOIN cte_rank_qtd c
ON a.NAME = c.NAME
GO
CREATE PROCEDURE report_ceo
AS
DECLARE @somedateLastMonth DATE = Dateadd(-1,m,Getdate()) WITH cte_main AS
(
SELECT p.NAME,
Isnull(Count(DISTINCT o.orderid), 0) corderid,
Sum(Isnull(o.ordertotal, 0)) sordertotal,
Sum (Isnull(oi.orderitemquantity, 0)) sorderitemquantity
FROM product p
INNER JOIN orderitem oi
INNER JOIN orders o
ON o.orderid - oi.orderid
ON p.productid = oi.productid
WHERE Year(o.orderdate) * 100 + Month(o.orderdate) = Year(@somedateLastMonth) * 100 + Month(@somedateLastMonth)
GROUP BY p.NAME),
cte_rank_value AS
(
SELECT NAME,
Rank() OVER( ORDER BY sordertotal DESC) rk
FROM cte_main),
cte_rank_qtd AS
(
SELECT NAME,
Rank() OVER( ORDER BY sorderitemquantity DESC) rk
FROM cte_main)
SELECT a.NAME [Product Name],
a.corderid,
[Orders Count] a.sordertotal [Total Sales Value],
b.rk [Rank Total Sales Value],
a.sorderitemquantity [Total Sales Quantity],
c.rk [Rank Total Sales Quantity]
FROM cte_main a
INNER JOIN cte_rank_value b
ON a.NAME = b.NAME
INNER JOIN cte_rank_qtd c
ON a.NAME = c.NAME
go
SELECT Row_number() OVER (ORDER BY o.orderdate DESC, o.ordertime DESC) rowNumber ,
*
FROM product p
INNER JOIN orderitem oi
INNER JOIN orders o
ON o.orderid - oi.orderid
ON p.productid = oi.productid
INNER JOIN cart c
ON c.orderid = o.orderid