ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2441|回复: 5

[求助] group by 为啥不能用alias name

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-8-4 15:01 | 显示全部楼层 |阅读模式
SELECT
a.material_code
,year(a.Consumption_Date)  
,month(a.Consumption_Date)  
,sum(a.consumption_qty) as sum0
,sum(nz(b.quantity,0)) as sum1
,(sum0 - sum1)
,(IIF(IsNULL(c.material),' ','Scrapped')) as flg
from ( SAP_Consumption a
left join
SMOG_Special_Sales b
on a.material_code  = cstr(b.code)
and month(a.Consumption_Date) = month(b.Delivery_Date)
and year(a.Consumption_Date) = year(b.Delivery_Date) )
left join (select distinct material from Scrapped_Blocked_list
where code_blocked_C1 = 'Y') c
on a.material_code = c.material
GROUP BY material_code
,year(a.Consumption_Date)
,month(a.Consumption_Date)
,flg

这样运行会报错
"You tried to execute a query that does not include the specified expression <name> as part of an aggregate function. (Error 3122)"

但是如果我把(IIF(IsNULL(c.material),' ','Scrapped')) 直接放在Group by里面,是可以得到正确结果

SELECT
a.material_code
,year(a.Consumption_Date)  
,month(a.Consumption_Date)  
,sum(a.consumption_qty) as sum0
,sum(nz(b.quantity,0)) as sum1
,(sum0 - sum1)
,(IIF(IsNULL(c.material),' ','Scrapped')) as flg
from ( SAP_Consumption a
left join
SMOG_Special_Sales b
on a.material_code  = cstr(b.code)
and month(a.Consumption_Date) = month(b.Delivery_Date)
and year(a.Consumption_Date) = year(b.Delivery_Date) )
left join (select distinct material from Scrapped_Blocked_list
where code_blocked_C1 = 'Y') c
on a.material_code = c.material
GROUP BY material_code
,year(a.Consumption_Date)
,month(a.Consumption_Date)
,(IIF(IsNULL(c.material),' ','Scrapped'))

为何不能用alias name在group by 里面 ?

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-8-5 11:50 | 显示全部楼层
有人知道吗,多谢多谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-8-6 08:18 | 显示全部楼层
我把问题简化一下:
select material_code as mc1,sum(consumption_qty) as sum1
from SAP_Consumption a
group by mc1

为啥我不能用alias name mc1在这个简单查询里面?

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-8-6 08:37 | 显示全部楼层
看来就是不能用

If you want to avoid the mess of the case statement being in your query twice, you may want to place it in a User-Defined-Function.

Sorry, but SQL Server would not render the dataset before the Group By clause so the column alias is not available.

TA的精华主题

TA的得分主题

发表于 2010-8-7 10:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

回复 2楼 liujchen 的帖子

因为group by 的操作对象是原表

TA的精华主题

TA的得分主题

发表于 2010-8-7 20:28 | 显示全部楼层
5楼回答是正解!我刚刚学了sql,心得是group by是对from的表进行分组,而select后的字段名是新表的字段名,原表中不存在。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-12 10:05 , Processed in 0.020692 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表