【发布时间】:2016-04-11 08:05:54
【问题描述】:
这里我正在尝试创建存储过程.. 按 detepart 分组.. 正确还是错误.??
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
【问题讨论】:
-
在
GROUP BY上,就像你在GROUP BY一样,DATEPART(DAY, od.OrderDate)和od.OrderDate。由于DATEPART(DAY, od.OrderDate)是od.OrderDate的一部分,DATEPART(DAY, od.OrderDate)是多余的 -
在查询中,当您
GROUP BY时,结果中可能有不止一行。并且只有一个行结果将分配给变量。 -
DATEPART()返回一个整数,表示指定日期的指定日期部分。为什么@NewDateDATETIME的数据类型是?应该是integer
标签: sql-server datetime stored-procedures group-by datepart