组合IIF和select语句从不同的表中提取数据



我正试图在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

相关内容

  • 没有找到相关文章

最新更新