我正试图在FoxPro数据库上使用DBF Commander
进行SQL查询,该数据库必须从另一个表中提取订购的数量和重量,并将它们相乘以获得总重量。
当我运行时,这会给我一个错误,我缺少一个逗号。如果我这样封装IIF(select)
语句:IIF((select ...) > 8000,"T","F")
,我得到) missing function
。
IIF()
中的select
是否不是有效操作?
select
HT.ordnum,
IIF((select sum(qtyord*weight) from 'DT.dbf' as DT where DT.ordnum = HT.ordnum as TotalWeight) >= 8000, "Big load", "Little Load")
from 'HT.dbf' as HT where HT.ordnum like '%12111%'
标准SQL看起来像这样:
SELECT HT.ordnum,
CASE WHEN SUM(qtyord.*weight) > 8000 THEN 'Big load' ELSE 'Little load' END
FROM HT.dbf as HT
WHERE HT.ordnum like '%12111%'
GROUP BY HT.ordnum
FoxPro是一款较老的产品,所以我不确定它的特定SQL方言会如何让你改变这一点。
删除"as TotalWeight"后重试
在FoxPro中,您可能可以执行以下操作。但很难说,因为您没有提供样本数据和预期结果的描述。
SELECT HT.ordnum, IIF(sum(DT.qtyord*DT.weight) >= 8000, "Big Load", "Little Load") ;
FROM HT ;
Left Join DT On DT.ordnum = HT.ordnum ;
GROUP BY HT.ordnum ;
where HT.ordnum like '%12111%'
NB FoxPro是DBase/XBase DBMS,iif((是内置函数"是线路延续
因此,由于您的HT.OrdNum=DT.OrdNum,但实际上并没有从HT中提取任何其他值,因此您完全可以从DT表中查询。在这种情况下,我预查询TD表,求和QtyOrd*Weight,并按ordNum分组。应用相同的where来过滤掉这些订单,将为每个ordNum提供一条记录。
由此看来,它只是一个针对内部预查询(PQ别名(的简单外部查询
SELECT
PQ.OrdNum,
IIF( PQ.TotalWeight > 8000, 'Big load', 'Little load' ) LoadSize
from
( select
DT.ordnum,
sum(DT.qtyord * DT.weight ) TotalWeight
from
DT
where
DT.ordnum like '%12111%'
group by
DT.ordnum ) PQ