当前位置: 代码迷 >> VFP >> 从VFP6升级至VFP9,发现Select.Group by.小弟我不会用了
  详细解决方案

从VFP6升级至VFP9,发现Select.Group by.小弟我不会用了

热度:4749   发布时间:2013-02-26 00:00:00.0
从VFP6升级至VFP9,发现Select...Group by...我不会用了。
VFP6中的Group by很随意的,当使用VFP 9的SQL特性环境下,Group by子句必须包含Select 完整的字段列表(聚合函数除外),这可麻烦啦,以前所有带group by子句的Select几乎全部报错!在不设置SET ENGINEBEHAVIOR 70的前提下,有没办法简单地批量替换成VFP9兼容的Select语句?

类似这样的Selet(只是随便举个例子,请不必考虑Select语句的业务逻辑):

Select 员工表.部门, 员工表.姓名, 员工表.性别, 员工表.职位, 员工表.工龄, sum(工资表.工资)... ;
group by 员工表.姓名 order by 1,2...

以前用VFP6写得很随意的,现在发觉在VFP9下,简直都不会用Select了!
苍天啊,大地啊!!
谁能教教我该怎么迅速地改好这些Group by代码啊!!!

------最佳解决方案--------------------------------------------------------
分表:
基本表:
 部门, 姓名, 员工ID 性别, 职位, 工龄
工资表:
员工ID 工资
SELECT * FROM 基本表 A INNER JOIN (
SELECT 员工ID,SUM(工资) FROM 工资表 GROUP BY 员工ID) B
ON A.员工ID=B.员工ID
------其他解决方案--------------------------------------------------------
 SET ENGINEBEHAVIOR 70

VFP对SQL语法要求更为严格,建议用标准的SQL语法
------其他解决方案--------------------------------------------------------
sys(3099,70)
------其他解决方案--------------------------------------------------------
vfp9.0 的 Select - SQL 语句更严格了,所以你最简单的方便就是在主程序开头加代码:
Set Enginebehavior 90

Sys(3099,70)
------其他解决方案--------------------------------------------------------
我就是想请教:
标准的SQL语法,如何处理类似需求?

就是想列一份包含了好多个字段的表,但只想对其中某一个字段分组(其实目的是想过滤掉重复的字段值,同名的只显示一行)。

标准的SQL语法,应该怎么写?恳请不吝赐教!

------其他解决方案--------------------------------------------------------
就是想列一份包含了好多个字段的表,但只想对其中某一个字段分组(其实目的是想过滤掉重复的字段值,同名的只显示一行)。

表中有无唯一标识的字段,贴记录、表结构出来看看
------其他解决方案--------------------------------------------------------
就类似顶楼那样的表,那样的情况啊。假设表中记录,“姓名”一项可能会有重复值:

姓名“张三”,他既是“工程部”的员工,又是“维修部”的,还是“业务部”的兼职,三个部门都会各发一部分工资给“张三”。

现在想统计出不重复的每一个人的Sum(工资),同时查询结果也顺带列出张三的一些主要个人信息:性别、职位、工龄等。

------其他解决方案--------------------------------------------------------
建议用员工ID来区分第1个人
比如上述3个张三,你取哪个,什么标准,计算工资总额?有无员工姓名与员工ID对应的表?3个部门
发的工资是3张表?
------其他解决方案--------------------------------------------------------
感谢WWWWA、WWWWB的关注!
唉,可能是我表述得啰啰嗦嗦、不太清楚……暂时还是用SET ENGINEBEHAVIOR 70吧。
唉。

------其他解决方案--------------------------------------------------------
该回复于2012-10-30 09:12:13被版主删除
------其他解决方案--------------------------------------------------------
那么,在VFP9下,或者说,在SQL Server或MySQL系统之下,
应该如何编写标准的SQL-Select语句,来处理类似的重复记录过滤需求?

VFP6的语句如下:
Select 部门, 姓名, 性别, 职位, 工龄, sum(工资) ;
From 员工表 ;
group by 姓名 ;
order by 1,2
into cursor 工资汇总表

应该如何修改成标准的SQL-Select呢?

------其他解决方案--------------------------------------------------------
非常感谢wwwb的指教!
原来是靠小表Group by,大表INNER JOIN,从而过滤重复表的,有点儿头绪了,呵呵。
以前用VFP6随意惯了,这SQL的标准语法确实得遵循,否则今后都没法移植。
一旦离开了VFP,别处可没有Sys(3099,70)啊!

------其他解决方案--------------------------------------------------------
这个很有用,做个标记顶一下
  相关解决方案