1

我试图基本上输入一年(不是整个日期)来获取一组结果,这些结果将告诉我今年售出的物品数量。但是,我不确定如何去做。下面是我所拥有的一个例子。

ALTER PROC OrderYear
(@OrderYear datetime)
AS

SELECT Orderdate as [Year],COUNT(SalesOrderID) as Count
FROM Sales.SalesOrderHeader
WHERE @OrderYear=YEAR(OrderDate)
GROUP BY OrderDate

BEGIN
SET NOCOUNT ON
END

EXEC OrderYear '2005'
4

2 回答 2

7

您想将查询谓词表示为一个范围,因为范围是 sargable:

SELECT Orderdate as [Year],COUNT(SalesOrderID) as Count
FROM Sales.SalesOrderHeader
WHERE OrderDate >= @firstDayOfYear AND OrderDate <= @lastDayOfYear
GROUP BY OrderDate;

所以诀窍是计算给定年份的@firstDayOfYear和。@lastDayOfYear我将把它作为练习留给读者。

于 2013-07-15T07:25:12.373 回答
-1

程序没问题,改变输入参数的类型:

ALTER PROC OrderYear
(@OrderYear int) 
AS
SELECT Orderdate as [Year],COUNT(SalesOrderID) as Count
FROM Sales.SalesOrderHeader
WHERE @OrderYear=YEAR(OrderDate)
GROUP BY OrderDate
于 2013-07-15T08:01:02.210 回答