2010-12-27 5 views
0

Ich habe eine gespeicherte Prozedur Problem hier aufgeführt ::Stored Procedure: Werte in den drei Spalten sind die gleichen, auch wenn die Order Date anders

Zum Beispiel Kunde A hat. i) Fünf Aufträge in ersten 30 Tagen .., ii) Fünf Aufträge in ersten 60 Tagen iii) Fünf Aufträge in ersten 90 Tagen

So soll das Ergebnis sein:

 A.) First 30 Days: Five orders 
    B.) First 60 Days: Five + Five = 10 Orders 
    C.) First 90 Days: Five + Five + Five = 15 Orders 

jedoch meine gespeicherten Prozedur zeigt '15 Orders' für alle 30,60 und 90 Tage. Könnten Sie mir bitte helfen, so dass meine Stored Procedure "5 Bestellungen" in 30 Tagen, "10 Bestellungen in 60 Tagen" und "15 Bestellungen" in 90 Tagen anzeigt. [UNTEN IST DER TEIL DES CODES] Vielen Dank für Ihre Hilfe.


IF (@CUSTOMERID IS NOT NULL) 
BEGIN 

CREATE TABLE #TEMP_D 
(
CUSTOMERID VARCHAR(20), 
ORDERID INT, 
PRODUCTID INT, 
QUANTITY VARCHAR(20) 
) 
INSERT INTO #TEMP_F(CUSTOMERID,ORDERID,PRODUCTID,QUANTITY) 
(CUSTOMERID VARCHAR(20),ORDERID INT,PRODUCTID INT,QUANTITY VARCHAR(20)) 
INSERT INTO #TEMP_D(CUSTOMERID,ORDERID,PRODUCTID,QUANTITY) 
SELECT C.CUSTOMERID, COUNT(O.ORDERID),COUNT(OD.PRODUCTID), 
     RANKING = CASE 
     WHEN SUM(OD.QUANTITY*OD.UNITPRICE)>250 THEN 'REGULAR' 
     WHEN SUM(OD.QUANTITY*OD.UNITPRICE)< 250 THEN 'MODERATE' 
     END 
     FROM CUSTOMERS C 
     INNER JOIN 
     ORDERS O ON C.CUSTOMERID=O.CUSTOMERID 
     INNER JOIN 
     [ORDER DETAILS] OD ON O.ORDERID=OD.ORDERID 
     WHERE (C.CUSTOMERID = @CUSTOMERID) 
     GROUP BY C.CUSTOMERID 



CREATE TABLE #TEMP_E 
(
CUSTOMERID VARCHAR(20), 
ORDERID INT, 
PRODUCTID INT, 
QUANTITY VARCHAR(20) 
) 
INSERT INTO #TEMP_F(CUSTOMERID,ORDERID,PRODUCTID,QUANTITY) 
(CUSTOMERID VARCHAR(20),ORDERID INT,PRODUCTID INT,QUANTITY VARCHAR(20)) 
INSERT INTO #TEMP_D(CUSTOMERID,ORDERID,PRODUCTID,QUANTITY) 
SELECT C.CUSTOMERID, COUNT(O.ORDERID),COUNT(OD.PRODUCTID), 
     RANKING = CASE 
     WHEN SUM(OD.QUANTITY*OD.UNITPRICE)>250 THEN 'REGULAR' 
     WHEN SUM(OD.QUANTITY*OD.UNITPRICE)< 250 THEN 'MODERATE' 
     END 
     FROM CUSTOMERS C 
     INNER JOIN 
     ORDERS O ON C.CUSTOMERID=O.CUSTOMERID 
     INNER JOIN 
     [ORDER DETAILS] OD ON O.ORDERID=OD.ORDERID 
     WHERE (C.CUSTOMERID = @CUSTOMERID) 
     GROUP BY C.CUSTOMERID 


CREATE TABLE #TEMP_F 
(
CUSTOMERID VARCHAR(20), 
ORDERID INT, 
PRODUCTID INT, 
QUANTITY VARCHAR(20) 
) 
INSERT INTO #TEMP_F(CUSTOMERID,ORDERID,PRODUCTID,QUANTITY) 
(CUSTOMERID VARCHAR(20),ORDERID INT,PRODUCTID INT,QUANTITY VARCHAR(20)) 
INSERT INTO #TEMP_D(CUSTOMERID,ORDERID,PRODUCTID,QUANTITY) 
SELECT C.CUSTOMERID, COUNT(O.ORDERID),COUNT(OD.PRODUCTID), 
     RANKING = CASE 
     WHEN SUM(OD.QUANTITY*OD.UNITPRICE)>250 THEN 'REGULAR' 
     WHEN SUM(OD.QUANTITY*OD.UNITPRICE)< 250 THEN 'MODERATE' 
     END 
     FROM CUSTOMERS C 
     INNER JOIN 
     ORDERS O ON C.CUSTOMERID=O.CUSTOMERID 
     INNER JOIN 
     [ORDER DETAILS] OD ON O.ORDERID=OD.ORDERID 
     WHERE (C.CUSTOMERID = @CUSTOMERID) 
     GROUP BY C.CUSTOMERID 


SELECT D.CUSTOMERID, D.ORDERID AS 'ORDERS 30 DAYD',D.PRODUCTID AS 'PRODUCTS 30 DAYS',D.QUANTITY, E.CUSTOMERID, E.ORDERID AS 'ORDERS 60     
    DAYS',E.PRODUCTID AS 'PRODUCTS 60 DAYS',E.QUANTITY, F.CUSTOMERID, F.ORDERID AS 'ORDERS 90 DAYD',F.PRODUCTID AS 'PRODUCTS 90 DAYS',F.QUANTITY 
    FROM #TEMP_D D 
    INNER JOIN #TEMP_E E ON D.CUSTOMERID=E.CUSTOMERID 
    INNER JOIN #TEMP_F F ON E.CUSTOMERID = F.CUSTOMERID 

END

+0

Würden Sie etwas Code und mögliche Informationen über die Tabellenstruktur posten? – Suirtimed

+0

Ich habe einen Teil des obigen Codes veröffentlicht. Danke. – user555190

Antwort

1

ich hier etwas fehlt, aber Ihre 3 Abfragen in temporären Tabellen scheinen alle die gleiche Abfrage zu sein. Sie filtern nicht nach Datum in Ihren WHERE-Klauseln, daher werden alle dasselbe Ergebnis (15 Bestellungen) erhalten.