【正确答案】正确答案:步骤1:在命令窗口执行命令:
MODIFY COMMAND progl
,打开程序文件编辑器输入如下程序代码: SELECT订单号,SUM(单价*数量)AS总金额; FROM order_detail; GROUP BY订单号; INTO CURSOR arrtable SELECT order_liSt.*; FROM order_liSt , arrtable; WHERE order list.订单号=arrtable. 订单号AND order_list.总金额<> arrtable.总金额; INTO TABLE Od_mod USE Od_mod DO WHILE NOT EOF() SELECT arrtable.总金额FROM arrtable ; WHERE arrtable.订单号=od_mod.订单号; INTO ARRAY arr REPLACE总金额WITH arr SKIP ENDDO CLOSE ALL SELECT*FROM od_mod ORDER BY总金额; INTO CURSOR arrtable1 SELECT * FROM arrtablel INTO TABLE Od_mod 步骤2:保存文件修改,在命令窗口执行命令:DO progl.prg,执行程序文件。
【答案解析】解析:本题主要考查SQL分组计算查询;DO WHILE循环结构。本基本解题思路可按以下步骤进行: 首先,根据order_detail表的“单价”和“数量”数据,利用分组计算查询求出每组订单的“总金额”,将结果保存到一个临时表中。 然后,通过对order_1iSt表和临时表的联接查询,找出order_list表中“总金额”字段与临时表中“总金额”不相同的记录,并将order_list表中这些“总金额”不相同的记录输出到od_mod表中。 接着利用DO WHILE循环语句对od_mod表中的每条记录进行处理。通过SQL查询语句从临时表中先获得与od_mod表当前所指记录“订单号”相同的“总金额”字段值,将该值保存到数组中,再通过REPLACE命令修改od_mod表当前记录的值,每处理完一条记录,记录指针便指向下一条记录,一直到处理完od_mod表中的所有记录。 最后将od_mod表的记录按“总金额”排序,由于查询结果不能覆盖正在作为查询数据源的表,因此,可以通过一个临时表过渡,保存排序的表记录,再通过临时表将排好序的记录保存到原数据表中。