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
结果报错了:
列名 '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
浙公网安备 33010602011771号