2014-10-12 56 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