group by为什么不能接别名

今天在查询一个数据表的时候,发现在group by中不可以使用别名。

语句如下:

1 SELECT (select Code FROM Order 
2 WHERE Id=Order_Relation.SourceOrder) AS 'source',
3 (select Code FROM Order 
4 WHERE Id=Order_Relation.DestinationOrder) as 'destination'
5 FROM [Order_Relation]
6 where ModifyReason=3
7 group by source,destination
8 order by source
View Code

 结果报错了:

列名 'source' 无效。
列名 'destination' 无效。

那么,为什么不可以group by中使用别名呢?

因为SQL的执行(解析)顺序为:
    where  =>  group by => having => select  => order

从上面的顺序,我们知道: 别名是在select中定义的,而group by解析时,别名还未定义。

 

那么,如果必须要对group by中的字段做分组,有什么别的替代方法?

针对上面的SQL语句,我目前只想到下面的办法:

 

 1 SELECT  *
 2 FROM (SELECT (select Code FROM Order 
 3 WHERE Id=Order_Relation.SourceOrder) AS 'source',
 4 (select Code FROM Order 
 5 WHERE Id=Order_Relation.DestinationOrder) as 'destination'
 6 FROM [Order_Relation]
 7 where ModifyReason=3
 8 ) AS A
 9 GROUP BY A.source,A.destination
10 ORDERBY A.source

 

posted on 2014-10-28 13:00  Leon-LYH  阅读(595)  评论(0)    收藏  举报

导航