我用php编写了这个查询:
<?php
$dsn="sistema";
$usuario="";
$clave="";
/*conexion mediante odbc*/
$cid=odbc_connect($dsn, $usuario, $clave);
if (!$cid){
exit("<strong>Ya ocurrido un error tratando de conectarse con el origen de datos. </strong>");
}
$sql="SELECT SUM(Document.docimp) AS sumar FROM Document WHERE Doctpo IN ('1','6','7') AND Document.Abocod = 1";
$sql1="SELECT SUM(Document.docimp) AS restar FROM Document WHERE Doctpo IN ('2','3') AND Document.Abocod = 1";
$sql3="Select (A.sumar - A.restar) AS Saldo;
From (;
Select Document.abocod,;
(SELECT SUM(Document.docimp) AS sumar;
FROM Document;
WHERE Doctpo IN ('1','6','7');
AND Document.Abocod = 1;
),;
(SELECT SUM(Document.docimp) AS restar ;
FROM Document;
WHERE Doctpo IN ('2','3');
AND Document.Abocod = 1;
);
From; Document;
Where Document.abocod = 1;
GROUP BY Document.abocod;
)AS A";
$result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
print odbc_result_all($result,"Border=1"););
?>
sql
从Document表中获取,来自Doctpo字段的所有类型为1,6和7的文件,执行sum
字段中的Docimp
,按订户号过滤(abocod )等于1并将结果与其名称(别名)放在一起。
sql1
功能与sql
相同,但这是客户付款,使用与上述相同的字段,但只选择类型2和3。
sql3
是在单个查询中加入sql
和sql1
的查询,并执行sql
和{{1}分别生成的所有函数}。
当我将它们运行到visual fox pro中时,查询(SQL)工作正常,但是当我从php执行它们时,sql1
和sql
可以正常工作,但它始终会抛出{{1}的错误声明。说该表未被识别或不存在。
我无法弄清楚它是如何无法与这些表进行连接的,如果这对Visual foxpro本身完全有效。
我想知道php,odbc和visual fox pro是否有'更清洁'或'更好'的方法。
任何人都能对此有所了解吗?
提前致谢!
答案 0 :(得分:1)
如何直接运行查询而不是两个单独的,然后加入...像
这样的东西select
sum( 0000.00 + iif( Doctpo in ( '1', '6', '7' ), Document.docimp, 0 )) as Sumar,
sum( 0000.00 + iif( Doctpo in ( '2', '3' ), Document.docimp, 0 )) as Restar,
sum( Document.docimp * iif( Doctpo in ( '1', '6', '7' ), 1, -1 )) as Saldo
from
FROM Document;
WHERE
Document.Abocod = 1;
AND Doctpo IN ('1','6','7', '2', '3');
我正在做0000.00 + IIF()的总和,因为从VFP查询返回的第一个值是最终集中该列类型的基础。因此,如果您希望任何余额超过9999.99,您可能需要根据需要调整默认长度/精度。