tjrmgs老师,“试图执行的查询中不包含作为聚合函数一部分的特定表达式”这究竟是什么原因呢?

1、图书库存表:2、图书销售表:3、我创建的查询:请老师帮忙看看哪儿错了?... 1、图书库存表:

2、图书销售表:

3、我创建的查询:

请老师帮忙看看哪儿错了?
展开
 我来答
tjrmgs
2015-07-27 · TA获得超过5764个赞
知道大有可为答主
回答量:2161
采纳率:94%
帮助的人:1014万
展开全部

使用Group by分组子句除了参与分组的字段、组汇总信息和有固定值的表达式外,不得输出未参与分组的字段信息。而您的表达式 “[库存]-[汇总]”中的“库存”字段并未参与分组而“汇总”字段也不存在,因而报错。


一般而言,使用查询设计视图设计复杂得查询往往不太好使,建议直接用SQL视图设计这个查询


基于“图书库存表”的“图书编号”字段为主键,建议方案如下:

select a.图书名称,b.汇总,a.库存 - nz(b.汇总,0) as 剩余图书量 
from 图书库存表 a left  join (
select 图书编号,sum(销售数量) as 汇总 from 图书销售表 
group by 图书编号
)b on a.图书编号=b.图书编号;


如果想查看这个查询的设计视图是怎样设计的,将SQL视图转到查询设计视图就行了。

更多追问追答
追问
老师好像中间新建了一个查询作为过渡,问一下老师“ nz(b.汇总,0)”这一句是什么用法?
追答
nz()函数可将空值(NULL)转换成某个固定值,例如0或其它什么值都可以。

在我的代码里考虑到会出现只有库存而无销售的情况因而使用了左连接,当图书库存表里的某个“图书编号”未出现于“图书销售表”里时“汇总”的值就会变为NULL,而“库存-NULL” 是会出错的,因此使用nz函数转换NULL为0,这样就可以确保计算字段“剩余图书量”始终都可以计算出正确结果。

顺便提一下,我之所以使用中间过渡子查询是因为,表与表连接后记录条数会变多,例如你提问的这个例子,图书库存表里的每个“图书编号”只有一个,直接与图书销售表基于“图书编号”连接后同一个”图书编号“下的”库存“记录条数就会变多(假如图书销售表的”图书编号“有重复的话)。此情形下如果对”库存“字段计算合计数就不正确了,这是我采用中间过渡子查询的原因所在。

请特别要在计算汇总信息时留意因表间连接所导致的记录条数的增加问题,否则汇总数就不正确,留意的这点对于成长为一个数据库高手很有用
来自:求助得到的回答
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式