存储过程:即使订单日期不同,三列中的值也相同

时间:2010-12-27 17:32:36

标签: sql sql-server-2005 tsql stored-procedures dynamic-sql

我在这里列出了一个存储过程问题::

例如,客户A具有:         i。)前30天五个订单,         ii。)前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

但是,我的存储过程显示所有30,60和90天的'15订单'。你能不能请我帮忙,以便我的存储程序在30天内显示'5个订单',在60天内显示'10个订单',在90天内显示'15个订单'。 [以下是该代码的一部分] 谢谢您的帮助。


 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

1 个答案:

答案 0 :(得分:1)

我可能在这里遗漏了一些东西,但你对临时表的3个查询似乎都是同一个查询。您没有在WHERE子句中按日期过滤,因此它们都会得到相同的结果(15个订单)。