新足迹

 找回密码
 注册

精华好帖回顾

· 分享我采到和吃过的荠菜 (2005-7-31) 飞儿 · 【~from 58 to 47~】 分享我的瘦身体验 --- “我与FitBit的亲密接触" (285#添加瘦身低卡美食~) (2012-12-18) 黑芝麻狐儿
· 堪培拉老公交车站市场 - V1 (2016-6-26) workflow · Coogee Beach 日出 (2013-6-1) silvia
Advertisement
Advertisement
查看: 1759|回复: 5

呼叫MS ACCESS高手,group by 为啥不能用alias name [复制链接]

发表于 2010-8-5 13:52 |显示全部楼层
此文章由 jl162401 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jl162401 所有!转贴必须注明作者、出处和本声明,并保持内容完整
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 里面 ?

谁有MS ACCESS的SQL语法大全啊,能否share一下,多谢多谢
Advertisement
Advertisement

发表于 2010-8-5 21:43 |显示全部楼层
此文章由 jl162401 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jl162401 所有!转贴必须注明作者、出处和本声明,并保持内容完整
没人知道啊

发表于 2010-8-6 10:19 |显示全部楼层
此文章由 jl162401 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jl162401 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我把问题简化一下:

select material_code as mc1,sum(consumption_qty) as sum1
from SAP_Consumption a
group by mc1

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

发表于 2010-8-6 10:43 |显示全部楼层
此文章由 jl162401 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jl162401 所有!转贴必须注明作者、出处和本声明,并保持内容完整
看来就是不能用

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

发表于 2010-8-6 14:11 |显示全部楼层
此文章由 wTam 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 wTam 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Try this.  This works in Oracle

select material_code as mc1,sum(consumption_qty) as sum1
from SAP_Consumption a
group by material_code

发表于 2010-8-6 15:12 |显示全部楼层
此文章由 rumcoke 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 rumcoke 所有!转贴必须注明作者、出处和本声明,并保持内容完整
lz的例子 就说明了直接用不行 可以尝试加一层子查询,
select a.* from
( #your actual query eg.
   select xxx as name from table ) a
group by a.name
如果你的目的是group by语句简洁 这样就达到目的了

[ 本帖最后由 rumcoke 于 2010-8-6 15:13 编辑 ]
Advertisement
Advertisement

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部