2014-10-12 59 views
0

我是新進步4gl。我有一個查詢,我必須計算特定客戶的銷售訂單數量。進度4gl:計數記錄?

例如:我有表作爲so_mstr,so_cust是我的客戶名稱字段,so_nbr是我的銷售訂單號字段。

在SQL我試圖這樣

select so_cust,count(distinct so_nbr) from so_mstr group by so_cust. 

請幫助我進步。 謝謝。

回答

1

規則#1 - 進度爲不是 SQL。嘗試在4gl中使用SQL的路徑只有痛苦和痛苦。

4GL的不支持一些有限的SQL-89語法,如:

select count(*) from customer. 

但放入的產品很長一段時間以前,實際上只是從90年代初滿足清單爲導向的產品評估。在臨時查詢中快速入侵有時非常有用,但不適合嚴重使用。 IOW「它是一個很好的演示」。通過SQL-92接口支持真正的SQL。這是來自4gl的獨立產品,通常用於支持報告工具,如Crystal Reports或其他。

如果有一個「so_mstr」每個訂單,你需要知道的訂單爲每一位客戶的數量那麼簡單4GL的方法來計算這些記錄是:

define variable i as integer no-undo. 

for each so_mstr no-lock where so_mstr.so_domain = "xxx" break by so_mstr.so_cust: 
    i = i + 1. 
    if last-of(so_mstr.so_cust) then 
    do: 
     display so_mstr.so_cust i. 
     i = 0. 
    end. 
end. 

你的代碼試圖做一些事情與「不同」,所以我假設每個客戶的銷售訂單數量的唯一性可能是錯誤的(但是這對某些人來說似乎是一個非常糟糕的設計)。

你可以做更復雜的事情與FOR EACH涉及中斷組和自動計數功能,但這些選項沒有更快,他們,恕我直言,更不可讀。特別是對於剛開始使用4gl的人來說。 (性能你也可以使用「字段列表」,但是如果連接是通過廣域網而不是通過共享內存進行的話,那真的很重要,而且它會使語法複雜化,我不想做一個簡單的例子。 )

+0

非常感謝您的回覆,湯姆。但我想爲所有客戶打印。 – Ankita 2014-10-12 13:23:10

+0

我試過了,對於每個so_mstr so_domain =「xxx」break by so_cust。 display so_cust so_nbr(由so_cust計數)。 結束。 – Ankita 2014-10-12 13:23:42

+0

這是一個例子 - 如果您想解決實際問題,您需要詢問您實際需要的內容。並公開表格之間的完整模式和關係。關鍵是要獲得適當的WHERE子句。 – 2014-10-12 14:44:09