如何使用并将值传递给Date的聚合函数的Alias Column

时间:2017-03-30 08:43:17

标签: sql-server sql-server-2008 sql-server-2012

我正在使用此查询从adventureworksLT2008获取年份:

"select DATEPART(YYYY,SellStartDate) as Year from SalesLT.Product group by DATEPART(YYYY,SellStartDate)"

现在我想像1998年那样过年,并获得1998年的所有记录

"select DATEPART(YYYY,SellStartDate) as 'Years' from SalesLT.Product where Years = '1998'" 

但是我收到了这个错误

  

无效的年份。 SellStartDate数据类型是datetime。

2 个答案:

答案 0 :(得分:1)

执行Years时未定义

WHERE。查看查询的execution order

像这样使用:

SELECT DATEPART(YYYY, SellStartDate) AS Years
FROM SalesLT.Product
WHERE DATEPART(YYYY, SellStartDate) = 1998

DATEPART函数返回int

答案 1 :(得分:0)

您可以将HAVING子句与GROUP BY语句一起使用以获取唯一值:

Select DATEPART(YYYY,SellStartDate) as Year from SalesLT.Product GROUP BY DATEPART(YYYY,SellStartDate)
HAVING DATEPART(YYYY,SellStartDate) = 1998

如果没有GROUP BY子句,请使用带有完整限定符列名称的comparison operator

Select DATEPART(YYYY,SellStartDate) as 'Years' from SalesLT.Product where DATEPART(YYYY,SellStartDate) = 1998

只需使用DISTINCT

即可避免重复
Select DISTINCT DATEPART(YYYY,SellStartDate) as 'Years' from SalesLT.Product where DATEPART(YYYY,SellStartDate) > 1998