| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1497 人关注过本帖
标题:SELECT TOP N *用法求助
只看楼主 加入收藏
megnhai19813
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2021-12-11
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
SELECT TOP N *用法求助
有表T1,用于记录每个项目的报价记录,基本字段A存放项目信息,字段B存放价格,另有字段C记录价格是否有效(是否型,默认值1/“有效”),设窗体、文本框,指定为[Forms].[数据计算].[Text1]。

C字段的计算规则:
每个项目按价格排序,最高价格的20%记录应被去除,方法将其对应的C字段置为为价格部分置为无效0/“否”,同时小数第1位四舍五入至整数位,即ROUND(该项目记录总数*0.2)。

重要事项:
这个TOP后面的N不是固定值,每个项目都不一样,即上面说的ROUND(该项目记录总数*0.2)

目的:根据排序,筛选出上限为ROUND()计算值的所有记录并作UPDATE。

方法1:在CLICK事件过程中
因为可以用DCount()函数取得项目记录数,并且可以设定变量赋值,偿试用select top n *,语法后DoCmd.Runsql ,发现这里不支持该语法。

方法2:使用更新查询(设窗体的文本框已输入指定数据)
单独语句:SELECT COUNT(*) FROM T1 WHERE A=Forms.数据计算.Text1;                                ‘可以执行,并得到记录总数
单独语句:SELECT  TOP 2 * FROM T1 WHERE A=Forms].[数据计算].[Text1] ORDER BY B DESC;            ‘语法可以执行,此处的2只是为了试验语法是否可行

1、偿试用DCount函数替换这个N,不考虑ROUND运算:
SELECT  TOP DCount("*","T1",'"&[Forms].[数据计算].[Text1]&"') * FROM T1 WHERE A=Forms].[数据计算].[Text1] ORDER BY B DESC;   ‘无法执行,提示:SELECT 子句中包含一个保留字、拼写错误或丢失的参数,或标点符不正确。
2、偿试SELECT 嵌套,不考虑ROUND运算
SELECT  TOP (SELECT COUNT(*) FROM T1 WHERE A=Forms.数据计算.Text1) * FROM T1 WHERE A=Forms].[数据计算].[Text1] ORDER BY B DESC;  ‘同样无法执行,报同样的错
3、偿试在窗体用DCOUNT取得记录总数并存变量INT2,不考虑ROUND运算
一、CLICK代码有:
int2 = DCount("*", "REC", "PRONAM = '" & STR1 & "' ")     '输入框已赋值给变量TTR1
MsgBox int2                                               '取得记录数并输出,已取到正确值。
DoCmd.OpenQuery "XXX"                                     '存放SQL语句的查询名称为XXX
二、XXX查询代码
SELECT  TOP [Forms].[数据计算].int2  * FROM T1 WHERE A=Forms].[数据计算].[Text1] ORDER BY B DESC;            '无法执行/保存,报同样的错

跪求解法?


搜索更多相关主题的帖子: 记录 数据 Forms SELECT 计算 
2021-12-11 22:54
megnhai19813
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2021-12-11
收藏
得分:0 
N必须 是常量?那这个问题怎么解
2021-12-11 23:05
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:987
专家分:4946
注 册:2013-2-16
收藏
得分:20 
先Select  项目信息 , count(*)  as 条数 from ... group by 项目信息 得到每个项目有多少条,
查询结果保存在一个RecordSet中.
再遍历这个RecordSet ,根据 条数和 项目信息 ,拼凑出不同的 Update 语句
再执行这个拼凑出的 Update 语句 .

可以直接在Access中写 VBA,当然用其它编程语言也是可以的,不复杂.
2021-12-13 14:44
快速回复:SELECT TOP N *用法求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024910 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved