2016-04-11 1 views
0

ここで私はストアドプロシージャを作成しようとしています.. detepartによってグループを作成しようとしています。どのようにストアドプロシージャの可変部分をdatepart関数として宣言する

CREATE PROCEDURE sp_NewvsOldOrders 
(
    @StartDate DATETIME, 
    @EndDate DATETIME 
) 
AS BEGIN 

    DECLARE @NewCount INT 
      , @NewRevenue INT 
      , @NewDate DATETIME 

    SELECT 
     @NewDate = DATEPART(DAY, od.OrderDate) 
     , @NewCount = COUNT(*) 
     , @NewRevenue = SUM((CONVERT(DECIMAL(18, 2), od.TotalAmount))) 
    FROM orderdetails od 
    INNER JOIN customer c 
     ON od.customerid = c.customerid 
    WHERE (CONVERT(DATETIME, (CONVERT(VARCHAR(50), od.orderdate, 101))) BETWEEN @StartDate AND @EndDate) 
     AND ((CONVERT(DATETIME, (CONVERT(VARCHAR(50), od.orderdate, 101)))) = (CONVERT(DATETIME, (CONVERT(VARCHAR(50), c.registereddate, 101))))) 
     AND (od.TransactionId IS NOT NULL) 
     AND (od.TransactionId <> '') 
    GROUP BY DATEPART(DAY, od.OrderDate) 
      , od.OrderDate 

END 
+0

を達成しようとしているものを伝えることができますと 'od.OrderDate'です。 'DATEPART(DAY、Od.OrderDate)'は 'od.OrderDate'の日の部分であるため、' DATEPART(DAY、od.OrderDate) 'は冗長です – Squirrel

+0

クエリでは、' GROUP BY'が結果の1行行結果の1つだけが変数に代入されます。 – Squirrel

+1

'DATEPART()'は、指定された日付の指定されたdatepartを表す整数を返します。なぜなら、 '@ NewDate'のデータ型は' DATETIME'ですか?それは整数でなければならない – Raj

答えて

1

おそらく、これはストアドプロシージャの設定方法です。あなたの要件を説明していないとして、私は本当に `あなたが` GROUP BY`両方 `DATEPART(DAY、od.OrderDate)であるため、あなたは` GROUP BY`で

CREATE PROCEDURE sp_NewvsOldOrders 
(
    @StartDate DATETIME, 
    @EndDate DATETIME 
) 
AS BEGIN 

    -- not used 
    --DECLARE @NewCount INT 
    --  , @NewRevenue INT 
    --  , @NewDate DATETIME 

    SELECT 
     NewDate = DATEPART(DAY, od.OrderDate) 
     , NewCount = COUNT(*) 
     , NewRevenue = SUM((CONVERT(DECIMAL(18, 2), od.TotalAmount))) 
    FROM orderdetails od 
    INNER JOIN customer c 
      ON od.customerid = c.customerid 
    WHERE (od.orderdate >= StartDate) 
    AND (od.orderdate < DATEADD(DAY, 1, @EndDate)) 
    AND (CONVERT(VARCHAR(50), od.orderdate, 101) 
     = CONVERT(DATETIME, c.registereddate, 101)) 
    AND (od.TransactionId IS NOT NULL) 
    AND (od.TransactionId <> '') 
    GROUP BY DATEPART(DAY, od.OrderDate) 
      --, od.OrderDate 

END 
+1

私は新旧の受注を望んでいるので、そのクエリで@NewCountが宣言されているので、ここで私は計算されたregistreddate = Orderdateは新規顧客 – Maybe

+1

上記のクエリはゼロを返す..値0行 – Maybe

関連する問題