为什么在SQL语句的GROUP BY里面不可以使用别名

左手青春右手年华 2016-03-29 12:37:24
select distinct a.cname,a.id,b.pmoney-b.fmoney as c from C_Customer a,S_StorageForm b where a.id=b.customerid group by a.cname,a.id,c

group by 别名 报错,有无替代方案,求指点。
...全文
2085 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cherish_ws 2017-03-06
  • 打赏
  • 举报
回复

上图是sql执行顺序,select 位置之前都不能使用别名。
Cherish_ws 2017-03-06
  • 打赏
  • 举报
回复
这个别名是最终生成的表中的列名,而在这过程中会生成若干临时表,group by操作临时表,此时别名还没出现。
泉子欣 2016-09-20
  • 打赏
  • 举报
回复
我也发现这样用不可以,只有在 order by 的时候可以使用别名。group by 的时候如果包含表达式要整个写进来。 替代方案可以是查询时把b 做成是派生表, b.pmoney-b.fmoney 作为一个c 列,然后你连接和group by 就可以使用 c 这个列名了
xiaoxiangqing 2016-03-30
  • 打赏
  • 举报
回复
这个是语法规定的
  • 打赏
  • 举报
回复
引用 2 楼 zbdzjx 的回复:
应该是没办法,除非在外面套一层,再group by。
其实我想表达的是:
select distinct a.cname,a.id,b.pmoney-b.fmoney  as c from C_Customer a,S_StorageForm b where a.id=b.customerid group by a.cname,a.id,c order by c desc
piaorou 2016-03-30
  • 打赏
  • 举报
回复
你可以用个偷懒的方法 select * from (select distinct a.cname,a.id,b.pmoney-b.fmoney as c from C_Customer a,S_StorageForm b where a.id=b.customerid group by a.cname,a.id,c) as abc group by abc.id................
  • 打赏
  • 举报
回复
谁能帮我改改啊
tcmakebest 2016-03-29
  • 打赏
  • 举报
回复
不可以就不可以吧,只要能解决问题,其实 group by 后面的字段可以从 select 语句推导出来,除了聚合函数字段都要放进来, 省略都没问题.
Ginnnnnnnn 2016-03-29
  • 打赏
  • 举报
回复
不可以,只有在 order by 的时候可以使用别名。group by 的时候如果包含表达式要整个写进来。 替代方案可以是查询时把b 做成是派生表, b.pmoney-b.fmoney 作为一个c 列,然后你连接和group by 就可以使用 c 这个列名了
zbdzjx 2016-03-29
  • 打赏
  • 举报
回复
应该是没办法,除非在外面套一层,再group by。
江南雪_158 2016-03-29
  • 打赏
  • 举报
回复
你可以看一下SQL查询执行顺序,group by 在第三步就执行了,select是在最后才执行的,再说了group by也不需要在界面显示,这个名字写什么都可以吧

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧