首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

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

2012-12-17 
从VFP6升级至VFP9,发现Select...Group by...我不会用了。VFP6中的Group by很随意的,当使用VFP 9的SQL特性环

从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)啊!

[其他解释]
这个很有用,做个标记顶一下

热点排行