我有一個表說'員工'與一個單一的字段說'名稱'。表中有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匹配查詢
- 3. 進展4GL查詢可選
- 4. 使用JDBC或ODBC執行進度數據庫查詢(4GL)
- 5. .NET進度4GL密碼
- 6. 進度4GL - Enumerable.Take(TSource)方法
- 7. Openedge進度4GL表加入
- 8. 進度4gl和C結構
- 9. 進度4gl:計數記錄?
- 10. 進度4gl - 共享程序
- 11. 進度數據庫4GL
- 12. 進度4GL基礎學習
- 13. 靜態查詢與動態查詢性能正在進行4GL
- 14. 從進度內進行Java調用4gl
- 15. 複製進度4GL中的數據庫
- 16. 進度4GL:關於TRIM功能
- 17. 進度4GL緩存器複製失敗
- 18. OpenEdge ABL中的反射/進度4GL
- 19. 進度鎖定表溢出問題4GL
- 20. 如何從進度4gl開始?
- 21. 進度4GL ABL(OpenEdge)調試器?
- 22. 進度4gl-內部程序名稱
- 23. 進度4GL - 立即獲取+ 1天
- 24. 進度4gl - 表格和框架
- 25. 進度4GL:從變量標記字段
- 26. OpenEdge進展4GL查詢%之後返回(丟失)
- 27. 進步4GL如何
- 28. Oracle(TOAD)查詢進度
- 29. 改進JOIN查詢速度
- 30. 進展4GL沒有Excel的
你說「一個選定的名字」。這裏選擇了什麼?在什麼基礎上選擇一個名字? – Austin 2014-09-20 17:49:00
這是一組相當奇怪的要求。我很好奇,你是否願意詳細說明爲什麼你需要這些特殊的限制? – 2014-09-21 14:52:58
首先,我需要知道我的理由是否可能或不正確的方式我陷害!我不需要這些特殊的限制,除非面試官充滿信心地聲稱可以做到這一點,我很好奇是駕駛的可能性! – Sheldon 2014-09-24 20:35:30