Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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 server SQL Server-窗口函数_Sql Server_Window Functions - Fatal编程技术网

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