westboy2000,再请教一下。(50分)

  • 主题发起人 主题发起人 hnzqw
  • 开始时间 开始时间
H

hnzqw

Unregistered / Unconfirmed
GUEST, unregistred user!
在你解答我的问题后,我在TAdoQuery中用如下SQL:
SELECT
进药记录.供货厂家,
Sum(进药记录.数量)-Sum(IIf(Len([付款记录.数量])>0,[付款记录.数量],0)),
//上行为数量差
Sum(进药记录.金额)-Sum(IIf(Len(付款记录.付款)>0,付款记录.付款,0))
//上行为金额差
FROM 进药记录 LEFT JOIN 付款记录 ON 进药记录.取药ID = 付款记录.取药ID
GROUP BY 进药记录.供货厂家;
现在GRID中想实现数量差值>0或=0的记录,对以上SQL语句是在程序中加上HAVING语句
还是用FILTER好,我希望用FILTER。
但在程序中我用的FILTER如下:
.Filter:='adoquery1.Fields[1].AsString >0';
却不对,应该如何写。谢谢!。
 
filter中可以写
filter:='数量差>=0'
 
你最好给你的sum字段起一个别名,这样在引用时就比较方便了,也不易出错,不要用fields[0]什么的。
例如,可以把SQL这样写:
SELECT 进药记录.供货厂家,
Sum(进药记录.数量)-Sum(IIf(Len([付款记录.数量])>0,[付款记录.数量],0)) 数量差,
Sum(进药记录.金额)-Sum(IIf(Len(付款记录.付款)>0,付款记录.付款,0)) 金额差
FROM 进药记录 LEFT JOIN 付款记录 ON 进药记录.取药ID = 付款记录.取药ID
GROUP BY 进药记录.供货厂家;

然后在Filter中就可以直接引用“数量差”和“金额差”了。
例如:filter:='数量差>0 or 金额差>0';
 
给计算字段加别名,应该用AS 别名吧,我照你上面的在计算字段后加空格再加别名,却不对。
在DB EXPLORE中用AS 别名,可以。但 在程序中在ADOTQUERY中用AS 别名时,即提示‘FIELD
EX100? 找不到?’为什么呢,竞争错在那里,应该如何加别名?谢谢!
 
SELECT 进药记录.供货厂家,
(Sum(进药记录.数量)-Sum(IIf(Len([付款记录.数量])>0,[付款记录.数量],0))) AS 数量差,
(Sum(进药记录.金额)-Sum(IIf(Len(付款记录.付款)>0,付款记录.付款,0))) AS 金额差
FROM 进药记录 LEFT JOIN 付款记录 ON 进药记录.取药ID = 付款记录.取药ID
GROUP BY 进药记录.供货厂家;
 
多人接受答案了。
 
后退
顶部