2017-07-27 5 views
-2

So, ich brauche Hilfe bei einigen Hausaufgaben.SQL Server - Fensterfunktionen

Unten ist das Schema der Teile der Datenbank, die ich verwenden muss. Table Scema

Ich bin sicher, dass es einige Redundanzen gibt (ich würde jede Hilfe bei der Einrichtung ebenso begrüßen). Wie auch immer, hier ist die Zuordnung:

  • Der Vertriebsleiter jetzt würde wie Sie einen Bericht zu erstellen, die von ihren Produkten zählt sowohl ihre Gesamtumsatz und die Gesamtverkaufsmenge (jeweils wird seine eigene Spalte sein). Erstellen Sie eine gespeicherte Prozedur, die
    die folgenden Spalten zurückgibt, aber auch mit den zwei neuen hinzugefügten Rangspalten.

    Produktname | Bestellungen zählen | Gesamtverkaufswert | Gesamtverkaufsmenge

  • Der CEO möchte die Verkäufe basierend auf den Verkäufen des letzten Monats wissen. Bitte stellen Sie ihr eine Anfrage, um die Produkte nach der Anzahl der Bestellungen im letzten Monat zu sortieren. Es sollte keine übersprungenen Nummern geben.

  • Erstellen Sie eine SELECT-Anweisung, die eine Liste der Aufträge mit Kunden-ID erzeugt, um Datum, etc. *** die Zeilennummer Funktion Verwenden Sie eine eindeutige ID für jede Zeile erzeugen, die

    nach Bestelldatum, absteigend sortiert ist
+0

ich ein Wagen Bestellungen würde sagen, enthält. Ein Auftrag enthält Bestellartikel. Ein OrderItem hat eine ProductId. Also ein Wagen zu vielen Bestellungen. Eine Bestellung zu vielen Bestellpositionen. Ein Bestellartikel zu einem Produkt. Ich sehe keinen Wert, der den Warenkorb mit Bestellartikeln oder Produkten verbindet. –

+2

Das sind deine Hausaufgaben, und du willst, dass andere Leute es für dich tun? Was hast du bis jetzt gemacht? – Eric

+1

Haben Sie diese Datenbank von Professor erstellt oder haben Sie sie erstellt? Ich frage, weil es viele Probleme mit dieser Datenbank gibt. –

Antwort

1

Probieren sie es

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 
Verwandte Themen