2010-12-27 1 views
0

Я хранимой процедуры проблемы, перечисленные здесь ::хранимая процедура: Значения в трех столбцах одинаковы, даже если дата заказа отличается

Например Клиент А имеет:. я) пять заказов в первые 30 дней .., б) пять заказов в первые 60 дней, III) пять заказов в первые 90 дней

Так что результат должен быть:

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

Однако моя хранимая процедура показывает '15 заказовза все 30,60 и 90 дней. Не могли бы вы помочь мне, чтобы моя Хранимая процедура показывала «5 заказов» за 30 дней, «10 заказов за 60 дней» и «15 заказов» за 90 дней. [НИЖЕ ЧАСТЬ КОДА] Благодарим вас за помощь.


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

Не могли бы вы разместить какой-либо код и возможную информацию о структуре таблицы? – Suirtimed

+0

Я разместил часть кода выше. Спасибо. – user555190

ответ

1

Я может быть что-то пропустил, но ваши запросы 3 во временные таблицы все, кажется, тот же самый запрос. Вы не фильтруете по дате в своих предложениях WHERE, поэтому все они придут с тем же результатом (15 заказов).