我有一个表说'员工'与一个单一的字段说'名称'。表中有9条记录。我需要在'where'子句的帮助下为每个查询写一个'for'查询,通过这个子句,我可以查看/显示一个选定的名字(比如'Sheldon'是9中的第6条记录)其余8个按字母顺序记录(名称)。 **注意:只能通过构建查询。没有临时表,缓冲区的概念。 'display'语句以外的'for each'块内不允许任何内容。进度4GL查询
进度4GL查询
回答
通常情况下,你会为此找到一个FIND,但是因为你要求一个FOR EACH - 这里有一个w/out WHERE。你可以很容易地添加,以获得你想要的任何最终结果。
FOR EACH employee
NO-LOCK
BY Employee.name:
DISPLAY employee.name WITH DOWN.
END.
这真的不产生什么被问:首先一个具体名称,其余的按字母顺序排列后... – Jensd 2014-09-21 08:54:32
他的要求是矛盾的 - 只有一个“为每个”,一个显示语句,首先显示一个名称,然后是所有表中除名称外的其他名称按升序排列。 他想要的东西无法完成。考虑到这一点,我认为他对这门语言非常陌生,所以我在上面写了一个选项,那就是他可以随时“品尝”味道。 – 2014-09-21 18:27:26
嗨@TimKuehn,我同意我对这门语言很陌生,至少对你有用。我会推动我的简短介绍,然后是2年2个月的进展,而编程概念推动我不少于6年。我要求这不能按照面试官问我的方式完成(至少这是我的'问题'),至少他可以听取我使用_buffer_的概念,但他的要求是不可动摇的,所以我选择了这个论坛来获得一个可能来自天才的世界'! – Sheldon 2014-09-24 20:41:40
我认为你说你有一个雇员表像记录:
Dan
Gus
Mike
Paul
Rich
Sheldon
Shelley
William
Xavier
而你所要的输出是:
Sheldon
Dan
Gus
Mike
Paul
Rich
Shelley
William
Xavier
在你不能做到这一点一个FOR FOREACH,因为你有两个完全不同的查询。一个找到“sheldon”记录(或者记录 - 你没有说他们是否独特),另一个找到其余的。
你可以做到这一点,像这样:
do with frame a.
for each employee no-lock where name = "Sheldon":
display name with frame a 10 down.
down with frame a.
end.
for each employee where name <> "Sheldon" by name:
display name with frame a.
down with frame a.
end.
end.
(“请勿与框架”和其他各种“帧”位仅仅使用单一框架如果你不关心这个。你不需要那些位)
如果你愿意扩大你的视野了一下,弯腰用找你能做到这一点,像这样:
find employee no-lock where name = "sheldon".
repeat:
if not available employee then leave.
display name with 10 down.
if name = "sheldon" then
find first employee no-lock where name <> "sheldon" no-error.
else
find next employee where name <> "sheldon" no-error.
end.
使用两对eaches。第一个从您选择的名字和更大的字母顺序返回,第二个从开始处开始,一到达您选择的名称就会中断。 这将按字母顺序从您选择的名称开始显示字段。这个假设名称是按字母顺序排序的键字段,否则可以使用其他选项对值进行排序。
对不起,没有测试代码,或担心格式。也不知道你的意思其余的必须按字母顺序排列,所以这里有两个变化。
使用临时表可以更轻松地完成这些方法中的任何一种。
应该是这样,如果你想显示从谢尔顿起谢尔顿然后阿尔法:如果你想显示从开始谢尔顿然后阿尔法
FOR EACH employee where name >= "sheldon" NO-LOCK:
DISPLAY employee.name.
END.
FOR EACH employee NO-LOCK:
if employee.name = "sheldon"
break;
DISPLAY employee.name.
END.
应该是这样,但不包括谢尔登:
FIND employee no-lock where name = "sheldon".
DISPLAY employee.name.
FOR EACH employee NO-LOCK where name <> "sheldon":
DISPLAY employee.name.
END.
出于显而易见的原因,我并没有花很多的时间去检测这一点,但卑鄙的欺骗似乎是:
for each employee where name = "sheldon" or name <> "sheldon":
display name.
end.
正如我所说 - 我会用它作为不合格测试。如果你这样想,那么你的代码比它的价值更麻烦。恕我直言。
我完全同意! – AquaAlex 2014-10-07 10:27:35
相对为非作恶方式,备案,这是对你拧Openedge的未来版本的安全:
for each employee
no-lock
by (if employee.name = "sheldon" then 1 else 2)
by employee.name
:
display employee.
end.
...但性能将是可怕的。
- 1. 进展4GL查询可选
- 2. 进度4gl和C结构
- 3. Openedge进度4GL表加入
- 4. 进度4gl:计数记录?
- 5. 进度4GL基础学习
- 6. 进度数据库4GL
- 7. .NET进度4GL密码
- 8. 进度4gl - 共享程序
- 9. 进度4GL - 立即获取+ 1天
- 10. 改进JOIN查询速度
- 11. 进步4GL - .ped文件
- 12. 进度4GL嵌套块显示相关数据
- 13. 进度4gl安全套接字身份验证
- 14. 进度4gl到Excel导出与合并单元格
- 15. 我想知道关于进度4GL的信息
- 16. 带中心标题的进度4GL报告
- 17. Office 2007升级中断4GL进度代码
- 18. 进度4GL显示缓冲区锁定类型
- 19. 正在修复sql长度错误正在进行中4gl 10.2B
- 20. 将进度4GL blob文件转换为pdf格式在c#
- 21. MySQL长查询进度监测
- 22. 进度条与MySQL的MySQL查询
- 23. 确定查询的进度(Oracle PL/SQL)
- 24. 在sqlite和python中查询进度条
- 25. 在'WHERE'之后写入嵌套4gl查询
- 26. 如何将进度4GL数据集输出参数转换为.net类型时消耗进度4Gl网络服务
- 27. 图片上传正在进行中4gl
- 28. 进展4GL调用C函数
- 29. 截图活动窗口进展-4GL
- 30. 关于进步4GL的好文学
你说“一个选定的名字”。这里选择了什么?在什么基础上选择一个名字? – Austin 2014-09-20 17:49:00
这是一组相当奇怪的要求。我很好奇,你是否愿意详细说明为什么你需要这些特殊的限制? – 2014-09-21 14:52:58
首先,我需要知道我的理由是否可能或不正确的方式我陷害!我不需要这些特殊的限制,除非面试官充满信心地声称可以做到这一点,我很好奇是驾驶的可能性! – Sheldon 2014-09-24 20:35:30