Sql server SQL Server“;无效的列名";错误|新手
我正忙于自学SQLServer,使用SQLServerManagementStudio。以下是产生错误的代码:Sql server SQL Server“;无效的列名";错误|新手,sql-server,Sql Server,我正忙于自学SQLServer,使用SQLServerManagementStudio。以下是产生错误的代码: SELECT SalesPersonID, COUNT(SalesOrderID), YEAR(OrderDate) AS SalesYear FROM Sales.SalesOrderHeader GROUP BY SalesYear; 为什么会抛出这个错误 列名“SalesYear”无效 列名“SalesYear”无效 此列将不在表SalesOrderHeader 选择Sales
SELECT SalesPersonID, COUNT(SalesOrderID), YEAR(OrderDate) AS SalesYear
FROM Sales.SalesOrderHeader
GROUP BY SalesYear;
为什么会抛出这个错误
列名“SalesYear”无效
列名“SalesYear”无效
此列将不在表SalesOrderHeader
选择SalesrSonid、COUNT(SalesOrderID)、YEAR(OrderDate)作为SalesYear
从Sales.SalesOrderHeader GROUP BY YEAR(OrderDate)
中,这与..销售年份有关,此处称为别名,根据逻辑查询处理模型,下面是按顺序执行的运算符
1 FROM
2 WHERE
3 GROUP BY
4 HAVING
5 SELECT
5.1 SELECT list
5.2 DISTINCT
6 ORDER BY
7 TOP / OFFSET-FETCH
因此,在上述步骤中,group by将在第3阶段执行,而您的select将在第5阶段执行
这意味着您的别名(处于选择阶段)将在选择之后(5之后)对操作员可见,但在他们之前不可见
我建议选一本基础知识教得很好的书,我发现伊齐克·本·甘的书非常有用您可以尝试以下查询和测试,以获得预期结果
DECLARE @SalesOrderHeader TABLE(SalesPersonID INT,SalesOrderID INT,OrderDate DATETIME)
INSERT INTO @SalesOrderHeader
SELECT 1,101,'20-Mar-2018' UNION ALL SELECT 1,102,'21-Mar-2018' UNION ALL SELECT 1,102,'21-Mar-2018' UNION ALL SELECT 2,202,'21-Mar-2018'
SELECT * FROM @SalesOrderHeader
SELECT SalesPersonID AS SalesPersonID, COUNT(SalesOrderID) NoOfOrder, YEAR(OrderDate) AS SalesYear
FROM @SalesOrderHeader
GROUP BY SalesPersonID,YEAR(OrderDate);
谢谢。在SQL中,在选择之前先评估分组依据。因此,groupby
无法使用别名saleyear
。您必须改为使用groupby YEAR(OrderDate)
。您需要使用GROUP BY YEAR(OrderDate)。别名不能在“分组依据”中使用。