我是4gl的新手。我有一个查询,我必须计算特定客户的销售订单数量。
例如:我的表格是so.mstr,so.cust是我的客户名称字段,so-nbr是我的销售订单号字段。
在SQL中,我试过这样做,
select so_cust,count(distinct so_nbr) from so_mstr group by so_cust.
请在进行中帮助我。谢谢
规则#1——进度是NOTSQL。在4gl中尝试使用SQL的过程中,除了痛苦之外,什么都没有。
4gl确实支持一些有限的SQL-89语法,例如:
select count(*) from customer.
但这是很早以前就在产品中提出的,实际上只是为了满足90年代初以清单为导向的产品评估。它有时对特别查询中的快速破解很有用,但不适合认真使用。IOW"这是一个很好的演示"。通过SQL-92接口支持Real 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的人来说。
(为了提高性能,你也可以使用"字段列表",但只有当连接通过WAN而不是共享内存时,这才真正重要,因为这会使语法复杂化。我不想做一个简单的例子。)